Go
golang

goの並行処理パターンについてのリンク集

More than 1 year has passed since last update.

はじめに

  • golangで並行処理を書く時に、参考にさせていただいているサイトのリンク集
  • 自分用のメモです

Advanced Go Concurrency 3 つのパターン - Block Rockin’ Codes

  1. loop を回して、定期的に外部サーバに GET を投げる
  2. 取得した結果を、 channel を経由して呼び出し側に渡す
  3. 呼び出し側から Close を呼ばれたら終了処理をする
  • Close() を channel を用いた形で実装
  • インターバル処理は、 time.Tick() を用いるこでイベントにできる
  • buffer からの取り出しは channel への書き込みに
  • nil channel

chanの使い方パターンメモ。 - GolangRdyJp

chanを扱う役割は5つある。
- makeする役(maker)
- writeする役(writer)
- readする役(reader)
- closeする役(closer)
- 破棄する役(GC)

  • パイプラインジョブパターン

Goでchannelがcloseしてるかどうか知りたい というアンチパターン - beatsync.net

さて、このタイトルを見てGoに詳しく賢明な読者の方々は「あぁまたこの話題だよ、Goでchannelがcloseしてるかどうか知りたいようなパターンはだいたい書いてるアプリの設計とかchannelの使い方が間違ってるんだからやめとけ」と眉をひそめるかもしれません。

  • closeしてるchannelに書き込むと死ぬ
  • closeしてるchannelをcloseすると死ぬ
  • nilなchannelに書き込むと永遠にブロックする
  • nilなchannelから読み込むと永遠にブロックする
  • closeしてないchannelに、データが来てない状態で読み込むとブロックする

Big Sky :: golang の channel を使ったテクニックあれこれ

  • 下記のサンプル
    • ポーリング
    • キューイング
    • ワーカー

Dispatcher-Workerのサンプル