私は最近、Googleのプログラミング言語であるGoについて学びました。私は、並行性のサポートが提供されていることに興味をそそられ、それについてさらに学ぶことに着手しました。しかし、私はGoが並行性の特定の機能をどのように実装しているかを見に行きました。これまでのところ、この機能がまったく存在しないという証拠はまったく見ていません。
これが架空の状況です。特定の入力のFoo値を決定する関数をプログラミングしていると仮定します。任意の入力について、Foo値はドメインAまたはドメインB(両方ではない)のいずれかにあります。これらのドメインでの検索の手法はまったく異なりますが、成功した検索はすぐに返される傾向があり、失敗した検索はデータセット全体を調べて網羅する必要があるため、時間がかかるという特性を共有しています。
さて、並行性を採用する他の言語(Cilkなど)では、関数Foosearchをプログラムして、Asearch関数とBsearch関数を生成することができます。これらの関数は同時に実行され、どちらかが答えを見つけたときはいつでも、その答えは呼び出し元の関数Foosearchに報告され、関数Foosearchは、生成された関数が返されなかった場合は終了します。
ただし、Goのゴルーチンでは、チャネルに接続できるルーチンは2つだけのようです。そのため、どちらが最初に回答を見つけたかに応じて、AsearchまたはBsearchのどちらかが送信できるチャネルを設定できず、Foosearchに読み取りを依頼できませんでした。それ。また、チャネルをブロックせずに読み取ることはできないようです。そのため、FoosearchでAsearchとBsearchを開始し、両方からチャネルを設定してから、ループで実行して、どちらかが生成されたかどうかを確認することはできませんでした。答え。
Goの並行性の限界についての私の理解は正しいですか?与えられた結果を達成する別の方法はありますか?