Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
goroutine で panic すると親プロセスをまきこんで落ちる
Search
uji
February 21, 2021
0
1.3k
goroutine で panic すると親プロセスをまきこんで落ちる
uji
February 21, 2021
Tweet
Share
More Decks by uji
See All by uji
マネーフォワード ME ブロックチェーン連携機能におけるGoの活用方法
uji
1
130
Goはブロックチェーン領域でなぜ使われ、どのように活躍しているのか
uji
1
500
標準パッケージ初のgenerics利用事例 "sync/atomic.Pointer"
uji
2
500
5分で完全理解するGoのiota
uji
7
5.1k
GoのGC (garbage collector)について理解する
uji
10
6.1k
シンプルなモック生成ツール matryer/moq 使ってみた
uji
0
390
Goにおけるポインタの使いどころ
uji
0
610
Google Chromeで始めるVim
uji
0
150
Featured
See All Featured
Music & Morning Musume
bryan
41
5.6k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
274
13k
Web Components: a chance to create the future
zenorocha
305
41k
BBQ
matthewcrist
80
8.8k
Intergalactic Javascript Robots from Outer Space
tanoku
266
26k
Being A Developer After 40
akosma
57
580k
Designing for humans not robots
tammielis
248
25k
Code Review Best Practice
trishagee
55
15k
Why Our Code Smells
bkeepers
PRO
331
56k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
21
1.6k
Creatively Recalculating Your Daily Design Routine
revolveconf
210
11k
Large-scale JavaScript Application Architecture
addyosmani
504
110k
Transcript
goroutine で panic すると 親プロセスをまきこんで落ちる uji @uji_rb
panic とは • 回復不能だと判断された実行時のエラーを発生させる機構 • panicが生じるとプロセスが止まる • 組み込み関数のpanicを呼び出すと発生する
panic のハンドリング • panic は defer + recover でハンドリングできる https://play.golang.org/p/sXEcmsxtV_Z
しかし... goroutine で panic が起こった場合 親プロセスからはハンドリングできない
goroutine の panic • goroutine 内で panic のハンドリングがされていないと 親プロセスごと落ちる https://play.golang.org/p/HUY-sN8PK-X
ぶち当たった問題 • api サーバーで goroutine を使った処理が panic が起こすとプロ セスがまるごと落ちてしまう apiサーバー
メインプロセス リクエスト プロセス リクエスト プロセス リクエスト プロセス リクエスト 子プロセス リクエスト 子プロセス
解決策 • goroutine 内ではなるべく panic が 起こらないようにする (error によるハンドリングを徹底)
• goroutine 内で panic の恐れがある場合は recover 処理を忘れない →汎用的につかえる並列処理実行関数をつくった
参考 • プログラミング言語Go完全入門 https://docs.google.com/presentation/d/1HW3wG8J_Q2536Iu__7HGr_mhurHajC7IOGjCnn3kZmg/edit?usp=sharing