謎の解明: 単一チャネル上の複数の受信者
同時実行の領域では、通信チャネルによりスレッド間でのシームレスなデータ交換が可能になります。ゴルーチン。チャネルの動作の重要な側面の 1 つは、同じデータを求めて競合する複数の受信者の存在を中心に展開します。
チャネルがバッファリングされていない場合、チャネルはキューのように動作し、データが利用可能になるまで受信者をブロックします。ただし、複数の受信機が同じチャネルに接続されている場合、不確実性が生じます。
重要な質問: データを獲得するのは誰ですか?
発生する極めて重要な問題は、どの受信機であるかです。データを受信し、ブロックを終了し、実行を再開する権限を取得します。
Aメカニズムを垣間見る
Go 言語の仕様を詳しく調べると、データの受信者が均一な擬似ランダム選択によって決定されるという興味深い事実に遭遇します。基本的に、ブロックを解除して利用可能なデータを受信するために、単一のランダムな受信者が選択されます。
このダイナミックにより、受信者がデータを受信する順序が決定的ではなくなります。選択された受信者はブロッキング状態から解放され、その実行パスを続行します。
好奇心旺盛な方へ
さらに明確にするために、言語仕様には次のように記載されています。より多くの通信を続行できる場合は、均一な擬似ランダム選択によって、続行できる 1 つの通信が選択されます。」これは、選択プロセスの非決定的性質をさらに強調します。
結論として、複数の受信者を持つ単一チャネル上のデータの受信者はランダムに決定され、公平性が確保され、Go の同時実行モデルの非決定的性質が維持されます。 .
以上がGo はバッファなしチャネル上の複数のレシーバーからどのように選択しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。