チャネル外に非緩衝され、その後、内部チャネルにさらにアウトは、データを格納されていません。
緩衝チャンネル番号、文字でハング、次いで配列ストレージに一つずつ取り出しに連続的です。
メインパッケージ インポート " FMT " FUNCメイン(){ VAR AちゃんINT =メーク(チャンINT、3 ) A <-1 A <-2 A <-3 fmt.Println(" 缓冲信道を" ) }
メインパッケージ インポート " FMT " {)(主FUNC VAR =を作る(チャンINT、4 ) A <-1 A <-2 fmt.Println(LEN(A))2://打印结果 (fmt.Println(キャップ)) //:4 < - fmt.Println(LEN()) //:1 fmt.Println(キャップ()) //:4 }
TEST6 FUNC(WG * sync.WaitGroup、I INT){ time.sleep(time.Second * 2 ) fmt.Println(I) wg.Done() } FUNC主は、(){ // のWaitGroup同期パケットに、値タイプ、場合転送パラメータ、アドレス取る必要 VAR WG sync.WaitGroupの ための I:= 0; I <5; I ++は{ // wg.Addはゴルーチン示すフラグ再生 wg.Add( 1 ) 囲碁TEST6( &、WGをI) } // すべてのコルーチン実行完了待ち wg.Wait() fmt.Println(" 完成行います" ) }
バッファチャネルの1つの重要な用途は、[作業プール]を達成することです。
一般的には、作業プールがスレッドを割り当てられたタスクを待っているのグループです。完了したタスクが割り当てられたら、これらのスレッドは、割り当てられたタスクを待ち続けることができます。
コア作業プール次のように機能します。
- コルーチンプールを作成するために移動し、待機中のジョブのモニタタイプ割り当てられた入力チャンネルをバッファリングします。
- 入力チャネル型バッファにジョブを追加します。
- ジョブが完了した後、その結果は、出力バッファ型チャネルに書き込まれます。
- そして、バッファ出力型チャネルから読み取る結果を印刷します。