問題タブ [akka-dispatcher]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
349 参照

scala - Future を処理するための Akka Dispatcher の使用

スプレー ベースの HTTP サービスがあります。この HTTP アプリケーション内で実行されるストリームがあります。このストリームは多くの I/O を行うため、別のスレッド プールを使用することにしました。Akka のドキュメントを調べて、スレッド プールを構成可能にするために何ができるかを確認しました。Akka で Dispatcher の概念に出くわしました。だから私は私のapplication.confで以下のようにそれを使用しようとしました:

私のアクターでは、この構成を次のように検索しようとしました。

サービスを実行すると、次のエラーが発生します。

私の質問は次のとおりです。

  1. 私が作成したこの io-dispatcher スレッド プールは、アクターのみに使用されることを意図したものですか? 私の意図は、アクタの 1 つによってインスタンス化されるストリームにこのスレッド プールを使用することでした。次に、このスレッド プールを自分のストリームに渡します。

  2. application.conf からディスパッチャーをロードするだけで ExecutionContext を作成するにはどうすればよいですか? スレッド プールの構成を読み取り、ExecutionContext を提供する特定のライブラリを使用する必要がありますか?

0 投票する
1 に答える
857 参照

scala - 可変サイズの Thread-Pool-Executor を備えた Akka Balancing Pool

これが私のユースケースです:

サイズ x (x は実行時に決定されるインスタンス/ルートの数) の Balancing-Pool ルーターを作成し、各ルートに独自の専用スレッドを持たせたいと考えています。各ルートはブロッキング操作を実行することが期待されています。

Akka のドキュメントでは、バランシング プールのディスパッチャーを変更できないと説明されています。これにより、Pinned Dispatcher を使用するオプションがなくなります (ルートごとにサイズ 1 のスレッドプールが必要です)。

Akka のドキュメントから:

BalancingPool は、そのルートに特別な BalancingDispatcher を自動的に使用します。ルートの Props オブジェクトに設定されているディスパッチャーは無視されます。これは、すべてのルートで同じメールボックスを共有することによってバランシング セマンティクスを実装するために必要です。

ルートで使用されるディスパッチャーを変更することはできませんが、使用されるエグゼキューターを微調整することは可能です。デフォルトではfork-join-dispatcherが使用され、Dispatchers で説明されているように構成できます[AJ: これはタイプミスであり、fork-join-executor を意味します]。ルートがブロッキング操作を実行することが予想される状況では、割り当てられたスレッドの数を明示的に示唆するスレッドプールエグゼキュータに置き換えると便利な場合があります

Akka docs からの設定サンプルも:

ルートの数に一致するプール サイズを持つスレッドプール エグゼキューターが機能するように見えますが、ここに問題があります。構成でプールサイズを明示的に設定する必要がありますか?

また、構成からルートのエグゼキューターをプルしながら、(コードで) Balancing-Pool を作成することは可能ですか? つまり、構成を使用してルーターを定義したくありません。使用したいのは次のとおりです。

ただし、 withMailbox() または withDispatcher() の同じスタイルを使用して、使用するエグゼキューターを (構成から) どういうわけか指定します

Balancing Dispatcher は "Driven by: java.util.concurrent.ExecutorService"であるため、ExecutorService を作成して、balancing-pool ルーターまたはそのディスパッチャーに渡すことはできますか?