著者/所属機関
Tengfei Tu (Pennsylvania State University) et al.
出典
ASPLOS 2019
目的
Goはgoroutineやmessage passingで並行処理を書きやすく,バグを埋め込みにくくしていると言われているが,本当にそうかが明らかにされていないので調査
Methodology
- 6つのGOで開発されたソフトウェアを調査
- Docker, Kubernetes, etcd, CockroachDB, gRPC, and BoltDB
- バグについては全3211の並行バグから171をランダムに選択して詳細分析
- 85はbloking bug, 86はnon-blocking bug
結果
Usage
- 実はmessage passingよりもshared memoryの利用の方が多い
“Concurrency Primitive Usage” from Related article
Blocking Bugs
- 85のblocking bugのうち42%はshared memroy,58%はmessage passing → 一般に考えられていることとは逆で,実はshared memory保護のミスよりmessage passingの誤りの方が多かった
- Goビルトインのdeadlock detectorは21のblocking bugを検出できた
Non-Blocking Bugs
- non-blocking bugの原因はmessage passingよりもshared memoryの方が多かった
- Goのdata race detectorは半分のnon-blocking bugを検出できた
Misc
- message passingはmessage passingで正しいプログラムを書くのは難く,結局この概念やその使い方の理解不足が原因でバグは埋め込まれてしまってる…
Tagged: #Go #concurrency