「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Java は、Go の Channel や Select と同様に、複数のブロッキング キューからのデータを効率的に多重化するにはどうすればよいでしょうか?

Java は、Go の Channel や Select と同様に、複数のブロッキング キューからのデータを効率的に多重化するにはどうすればよいでしょうか?

2024 年 12 月 23 日に公開
ブラウズ:991

How Can Java Efficiently Multiplex Data from Multiple Blocking Queues, Similar to Go's Channels and Select?

Java の Go チャネルに相当: ソース データの多重化

複数の BlockingQueue の監視が必要であるが、複数のリーダー スレッドを作成しない状況を処理するには、 Go のチャネルと選択に似たメカニズムは貴重です。 Java では、JCSP ライブラリが同等の機能を提供します。

JCSP 代替: Go Select の対応物

JCSP 代替は Go の select ステートメントと同等です。これにより、消費側のスレッドがポーリングすることなく複数の入力チャネルをオンにできるようになります。これにより、ソース データの効率的な多重化が保証され、一部のキューにデータがない場合でも不要なループが回避されます。

JCSP 実装

入力の公平な多重化のための 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 ());
     }
   }
 }

デッドロックの回避

Go と同様、チャネルを使用する Java プログラムはデッドロックを回避するように慎重に設計する必要があります。 JCSP ライブラリの正式な分析は、そのチャネルと代替実装を検証し、信頼性とデッドロックからの解放を保証します。

JCSP の最新の安定リリースはバージョン 1.1-rc5 です。 Web サイトに記載されているバージョンではありません。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3