goroutine で panic すると親プロセスをまきこんで落ちる
by
uji
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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