php Xiaobian Yuzai Go 言語では、バッファ チャネルは強力で柔軟なツールです。バッファ付きチャネルは、データの送信と受信を同期し、通信の速度と順序を制御するメカニズムを提供します。そのスコープはブロッキングです。つまり、チャネルがいっぱいまたは空の場合、十分なスペースまたはデータが利用可能になるまで、送受信操作はブロックされます。このメカニズムにより、並行プログラムにおけるリソースの競合やデッドロックの問題を効果的に回避し、プログラムの信頼性とパフォーマンスを向上させることができます。バッファ チャネルを合理的に使用することで、開発者は並行プログラムの実行プロセスをより適切に制御し、プログラムの効率と安定性を向上させることができます。
脳に問題があるのでしょうが、バッファチャネルの反復中にブロックされました
リーリー ###出力### リーリー は、まあ、決して呼び出されません。
###編集###
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:golang;toolbar:false;"> results := []search.book{}
resultsstream := make(chan []search.book, 2)
defer close(resultsstream)
// parallelize searches to optimize response time
for _, src := range sources {
go src.search(bookname, resultsstream)
}
counter := 0
for sourceresults := range resultsstream {
counter = counter + 1
results = append(results, sourceresults...)
fmt.println(counter)
}
fmt.println("never called")
</pre><div class="contentsignin">ログイン後にコピー</div></div>
並列検索ごとに新しいチャネルを作成でき、すべてのワーカー コルーチンが完了したらチャネルを閉じることができます。これにより、受信側ループが終了します (注: 送信側は知らないため、受信側からチャネルを閉じないでください。閉じられたチャネルに送信するとパニックが発生します)。
以上がGo のバッファーされたチャネル スコープがブロックされているの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。