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
2.1k
goroutine で panic すると親プロセスをまきこんで落ちる
uji
February 21, 2021
Tweet
Share
More Decks by uji
See All by uji
MCP 公式の Go SDK で QA データ登録アシスタントを作ってみた
uji
0
120
Green Tea GCの動作を紙芝居にしてみる
uji
1
110
Go Proverbs の紹介
uji
2
150
Go標準の暗号ライブラリメンテナンス戦略
uji
3
680
NOT A HOTEL TECH TALK ーSOFTWARE 3.0への道筋ー NEXT Web3 (2024-08-07)
uji
0
190
マネーフォワード ME ブロックチェーン連携機能におけるGoの活用方法
uji
1
240
Goはブロックチェーン領域でなぜ使われ、どのように活躍しているのか
uji
1
750
標準パッケージ初のgenerics利用事例 "sync/atomic.Pointer"
uji
2
930
5分で完全理解するGoのiota
uji
11
7.3k
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.8k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Side Projects
sachag
455
43k
Why Our Code Smells
bkeepers
PRO
340
57k
Embracing the Ebb and Flow
colly
88
4.9k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.1k
[RailsConf 2023] Rails as a piece of cake
palkan
57
6.1k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Context Engineering - Making Every Token Count
addyosmani
9
410
The Pragmatic Product Professional
lauravandoore
36
7k
What's in a price? How to price your products and services
michaelherold
246
12k
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