はじめに
-
- golangで並行処理を書く時に、参考にさせていただいているサイトのリンク集
- 自分用のメモです
Advanced Go Concurrency 3 つのパターン – Block Rockin’ Codes
loop を回して、定期的に外部サーバに GET を投げる
取得した結果を、 channel を経由して呼び出し側に渡す
呼び出し側から 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のサンプル
-
- Goで毎分100万リクエストを処理する | プログラミング | POSTD
-
- golang の channel を使って Dispatcher-Worker を作り goroutine 爆発させないようにする – at kaneshin
Re: golang の channel を使って Dispatcher-Worker を作り goroutine 爆発させないようにする – okzkメモ
上の記事を受けて、worker構造体なんて定義しなくてもforループでよくね、という内容