Upgrade to Pro — share decks privately, control downloads, hide ads and more …

goroutine で panic すると親プロセスをまきこんで落ちる

uji
February 21, 2021
630

goroutine で panic すると親プロセスをまきこんで落ちる

uji

February 21, 2021
Tweet

Transcript

  1. goroutine で panic すると

    親プロセスをまきこんで落ちる

    uji @uji_rb


    View Slide

  2. panic とは

    ● 回復不能だと判断された実行時のエラーを発生させる機構
    ● panicが生じるとプロセスが止まる


    ● 組み込み関数のpanicを呼び出すと発生する

    View Slide

  3. panic のハンドリング

    ● panic は defer + recover でハンドリングできる

    https://play.golang.org/p/sXEcmsxtV_Z


    View Slide

  4. しかし...

    goroutine で panic が起こった場合

    親プロセスからはハンドリングできない


    View Slide

  5. goroutine の panic

    ● goroutine 内で panic のハンドリングがされていないと

    親プロセスごと落ちる

    https://play.golang.org/p/HUY-sN8PK-X


    View Slide

  6. ぶち当たった問題

    ● api サーバーで goroutine を使った処理が panic が起こすとプロ
    セスがまるごと落ちてしまう

    apiサーバー

    メインプロセス

    リクエスト

    プロセス

    リクエスト

    プロセス

    リクエスト

    プロセス

    リクエスト

    子プロセス

    リクエスト

    子プロセス


    View Slide

  7. 解決策


    ● goroutine 内ではなるべく panic が

    起こらないようにする

    (error によるハンドリングを徹底)

    ● goroutine 内で panic の恐れがある場合は

    recover 処理を忘れない

    →汎用的につかえる並列処理実行関数をつくった


    View Slide

  8. 参考

    ● プログラミング言語Go完全入門
    https://docs.google.com/presentation/d/1HW3wG8J_Q2536Iu__7HGr_mhurHajC7IOGjCnn3kZmg/edit?usp=sharing

    View Slide