バッファ チャネルを使用する場合
バッファ チャネルにより、同時プロセス間でのデータ送信が可能になり、複数の並列アクションを実行できます。この例では、同期チャネルを使用して 3 つの並列プロセス (ゴルーチン) が開始されます。ただし、このアプローチでは、ゴルーチンが完全なチャネルからのデータの待機をブロックするときにボトルネックが発生する可能性があります。
バッファ付きチャネルの利点
バッファ付きチャネルは、バッファ サイズ。チャネル内でキューに入れることができるアイテムの最大数を指定します。これにより、ゴルーチンがデータが消費されるのを待たずにバッファにデータを保存できるようになり、ブロック動作が排除されます。
バッファリングされたチャネルの実用的な使用例
バッファ付きチャネルの使用例は、タスク スケジューラなどでタスク キューをモデル化する場合です。ここで、タスク スケジューラはバッファされたチャネルにジョブをスケジュールし、ワーカー スレッドはチャネルからジョブを受信してジョブを消費します。タスクの完了にスケジュールよりも時間がかかる場合でも、バッファリングされたチャネルにより、タスクをスケジュールするたびにブロックされないため、スケジューラは入力に応答し続けることが保証されます。
具体例
データベースからデータを取得する Web サイトに関する具体的な例を考えてみましょう。データベース クエリが遅く、完了までに数秒かかるとします。
バッファリングされたチャネルなし: 同期チャネルを使用すると、データのフェッチを担当するゴルーチンがブロックされ、他のゴルーチンが実行できなくなります。これにより、クエリが完了するまでウェブサイトが応答しなくなる可能性があります。
バッファ付きチャネルの場合: バッファ サイズが 10 などのバッファ付きチャネルを導入すると、複数のゴルーチンが同時にデータをフェッチできるようになります。 。 goroutine がデータを要求すると、データはすぐにバッファーに格納されます。他のゴルーチンはブロックせずにバッファーからのデータを消費できるため、Web サイトの応答性が確保されます。
以上がGo 同時実行でバッファーされたチャネルを使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。