1762893129
2025-11-11 20:26:00
Go の同時実行性について人々が絶賛しているのを聞いたことがあるでしょう。 「とても簡単ですよ!」彼らは言います。 「ただ叩いてください」 go キーワードを入力すれば完了です!」
そう、表面的にはシンプルに見えます。しかし、午前 3 時に本番環境のバグに膝まで浸かるまでは、誰も話さないことがあります。
Go の同時実行モデルには、内部で実際に何が起こっているのかを知らなければ、ひどく痛む可能性のある複雑さが隠されています。
美しい嘘
Go の同時実行性を教えるときに誰もが示すものは次のとおりです。
func main() {
go doSomething()
go doSomethingElse()
time.Sleep(time.Second)
}
見てください、なんときれいなことでしょう!見てください、なんとシンプルなことでしょう!追加するだけです go とブーム、あなたは並行しています。ただし、このコードは実際には、すぐには分からない形で壊れています。
彼らがあなたに教えてくれないこと
1. ゴルーチンは無料ではありません
ゴルーチンは「軽量」で、何百万ものゴルーチンを生成できると誰もが言います。それは技術的には正しいですが、誤解を招くものでもあります。
各ゴルーチンは約 2KB のスタック領域から始まります。実際のプログラムが何か役に立つことをする前に、100 万個をスポーンすると、そこには 2GB のメモリが必要になります。
#の同時実行性の背後にある汚い秘密 #アビナブ著 #年 #月