Go並行処理の要点を1冊に凝縮、動くサンプルで学ぶ
Go Concurrency Distilled

Goの並行処理を短時間で復習できるミニブック。goroutine、channel、select、pipeline、context、WaitGroup、data race、mutex、atomic、テスト、スケジューリング、診断まで全19トピックを網羅し、各トピックにブラウザで書き換えて実行できるインタラクティブな例を用意。PDF版もあり、AIを使わずに書かれている。
これはGo並行処理のクイックリフレッシャーであり、初心者向けガイドではない。
HNでの議論
182- SamInTheShell
Goの並行処理とスレッドは、他のどの言語と比べても魔法のように感じられる。私はgoroutine中毒で、更生するつもりは一切ない。
長年の観察から言えるのは、物事がどのスレッドで起きるかという点において、これに似た言語は他にないということだ。
- voidfunc
Goを10年以上書いているが、今でもchannelsを完全に「理解」できた気がしない。使うたびにマニュアルを参照しなければならないし、どのパターンも自明に感じられない。言語の他の部分はとても自明に感じられるのに、それは奇妙だ。
JavaでThreadやRunnableを扱ってきた年月が長すぎて、脳が腐ったのだろう。
- fizlebit
いつも思った以上に手間がかかると感じるのは、Makefileのような、でももう少し動的な操作のグラフがある場合だ。このモデルでは、completable futuresとexecutorsがうまく機能するように思える(グラフが小さめであれば、だが)、しかしgolangでは(あるいはgenerics以前は)単に難しかった。
- kccqzy
多くの人にとって、何をすべきかを学ぶこと以上に、Goでやってはいけないことやアンチパターンを読む方が役立つ。そしてGoのデータ競合パターンに関するこの記事に勝るものはない:https://www.uber.com/us/en/blog/data-race-patterns-in-go/
- Jeeetendra
正直なところ、Goの並行処理の難しいところは決してgoroutineを起動することではなく、キャンセルとシャットダウンをきちんと機能させることだ。context、race、diagnosticsが一つの実行可能な場所で見られるのは良い。
- rienbdj
GoのchannelはHaskellのtvarに相当するのか?
- phplovesong
Goは本当に優れた並行処理の話を持っている。現存する中でも最高のものの一つだ。async/awaitを持つ言語もあれば(たいてい酷い)、まったく何もない言語もある(phpのように)。
- Segv77
Goの並行処理は表面的には単純に見えるが、selectと適切なエラーハンドリングをマスターするには練習が必要だ。このトピックがまとめられているのを見るのは良い。