goroutine で panic すると親プロセスをまきこんで落ちる
by
uji
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
goroutine で panic すると 親プロセスをまきこんで落ちる uji @uji_rb
Slide 2
Slide 2 text
panic とは ● 回復不能だと判断された実行時のエラーを発生させる機構 ● panicが生じるとプロセスが止まる ● 組み込み関数のpanicを呼び出すと発生する
Slide 3
Slide 3 text
panic のハンドリング ● panic は defer + recover でハンドリングできる https://play.golang.org/p/sXEcmsxtV_Z
Slide 4
Slide 4 text
しかし... goroutine で panic が起こった場合 親プロセスからはハンドリングできない
Slide 5
Slide 5 text
goroutine の panic ● goroutine 内で panic のハンドリングがされていないと 親プロセスごと落ちる https://play.golang.org/p/HUY-sN8PK-X
Slide 6
Slide 6 text
ぶち当たった問題 ● api サーバーで goroutine を使った処理が panic が起こすとプロ セスがまるごと落ちてしまう apiサーバー メインプロセス リクエスト プロセス リクエスト プロセス リクエスト プロセス リクエスト 子プロセス リクエスト 子プロセス
Slide 7
Slide 7 text
解決策 ● goroutine 内ではなるべく panic が 起こらないようにする (error によるハンドリングを徹底) ● goroutine 内で panic の恐れがある場合は recover 処理を忘れない →汎用的につかえる並列処理実行関数をつくった
Slide 8
Slide 8 text
参考 ● プログラミング言語Go完全入門 https://docs.google.com/presentation/d/1HW3wG8J_Q2536Iu__7HGr_mhurHajC7IOGjCnn3kZmg/edit?usp=sharing