Java の Go チャネルに相当
質問:
データを効率的に読み取る必要があります個別のリーダー スレッドを作成せずに、複数のブロッキング キューから読み取ります。 Java には Go の select/epoll と同等のメカニズムがありますか?
回答:
Alternative クラスを提供する JCSP ライブラリの使用を検討してください。 Alternative は Go の select ステートメントに相当します。これにより、継続的なポーリングを必要とせずに、複数のソース チャネルからのデータを多重化できる単一のコンシューマ スレッドを作成できます。
JCSP 代替の利点:
使用例:
次の Java コードは、以下を使用して公平なマルチプレクサを示します。 JCSP:
import org.jcsp.lang.*; public class FairPlex implements CSProcess { private final AltingChannelInput[] in; private final ChannelOutput out; public FairPlex (final AltingChannelInput[] in, final ChannelOutput out) { this.in = in; this.out = out; } public void run () { final Alternative alt = new Alternative (in); while (true) { final int index = alt.fairSelect (); out.write (in[index].read ()); } } }
追加メモ:
JCSP Web サイトに記載されている内容とは異なり、Maven リポジトリ内の JCSP の現在のバージョンは 1.1-rc5 です。
以上が複数のブロッキングキューから効率的に読み取るための Go の「select」に相当する Java はありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。