0

私が見る限り、実行中のファイバーがブロックされている場合、スレッドは別のファイバーを実行できます.しかし、そうではありません.solrを検索する100本のファイバーを作成します.結果は、すべてのファイバーが順番に実行されている.別の.ファイバーは、前のものがスレッドのように終了した場合にのみ実行できます。これが私のコードです。

import co.paralleluniverse.fibers.Fiber;
import co.paralleluniverse.fibers.FiberForkJoinScheduler;
import co.paralleluniverse.fibers.FiberScheduler;
import co.paralleluniverse.fibers.SuspendExecution;

public class FilterThreadTest {
    static FiberForkJoinScheduler fiberForkJoinScheduler = new FiberForkJoinScheduler("fork-join-schedule", 1);
    static SolrService solrService = new SolrService();

    public static void main(String[] args) {
        solrService.init();
        for (int i = 0; i < 100; i++) {
            new CountFiber(fiberForkJoinScheduler, i, solrService).start();
        }
        try {
            Thread.sleep(10000000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

class CountFiber extends Fiber<Void> {

    /**
     * 
    */
    private static final long serialVersionUID = 1L;
    private int count;
    private SolrService solrService;

    public CountFiber(FiberScheduler scheduler, int count, SolrService     solrService) {
        super(scheduler);
        // TODO Auto-generated constructor stub
        this.count = count;
        this.solrService = solrService;
    }

    @Override
    public Void run() throws SuspendExecution, InterruptedException {
        System.out.println(count + " fiber is starting!");
        solrService.search();
        System.out.println(count + " fiber is ended!");
        return null;
    }

}

食物繊維を誤解していませんか?

4

1 に答える 1

0

ファイバーは、スレッドブロッキング呼び出しではなく、ファイバーブロッキング呼び出しを実行する場合にのみ、他のブロックされていないファイバーに実行を譲ります.Quasarはスレッドブロッキング呼び出しをファイバーブロッキング呼び出しに自動的に変換しないため、書き込む必要があります(通常は小さい) Quasar について知らない既存のツールの統合。

Quasar が提供する並行プログラミング ライブラリ (Go のようなチャネル、Erlang のようなアクター、データフロー プログラミング、リアクティブ ストリーム、およびjava.util.concurrentポート) は、ファイバー ブロッキング (ファイバーから呼び出された場合) とスレッド ブロッキング (スレッドから呼び出された場合) の両方をサポートします。同じことが、多くのツールをカバーする Comsat 統合にも当てはまりますが、現在のところ、Solr は対象外です。自分で Solr 統合を構築しましたか、それともsolrService.search()スレッドブロッキングのみですか?

ツールを Quasar に統合する方法の詳細については (通常は非常に簡単です)、たとえば、このブログ投稿を参照してください。

于 2016-08-11T06:44:25.980 に答える