チャネルでGoの並行処理をマスターする

かつて、私はGoで画像処理パイプラインを構築したことがあります。

すべてのステップにgoroutineを使用し、それらをチャネルで繋ぎました。そして、実行ボタンを押しました。

プログラムはフリーズしました。メモリ使用量は上昇し、そして死にました。エラーは出ませんでした。ただ、静寂だけがありました。

壊れたスケジューラをデバッグするために何時間も無駄にしました。間違っていたのは私でした。チャネルの仕組みを理解していなかったのです。

Goプログラムがハングするのを防ぐための3つのルールを紹介します。

  1. Nilチャネルはブラックホールである Nilチャネルは永遠にブロックされます。Nilチャネルに対して送信または受信を行うと、goroutineは停止したままになります。
  1. クローズのルールを守ってパニックを防ぐ チャネルのクローズは不可逆的です。
  1. 安全性のためにチャネルの方向を指定する Goでは、チャネルが送信用か受信用かを指定できます。

クリーンなパイプラインを構築する方法:

これらのパターンに従うことで、リークやパニックを防ぐことができます。テストが容易で、堅牢なシステムを構築できるようになります。

あなたへの挑戦: 複数の入力チャネルを1つの出力チャネルにマージする関数を書いてください。select ループを使用し、500msのタイムアウトを追加してください。また、goroutineがリークしないことを保証してください。

あなたの解答をコメント欄に投稿してください。

出典: https://dev.to/timevolt/go-concurrency-the-jedis-guide-to-goroutines-channels-may-the-fork-be-with-you-2g79