問題タブ [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.
scala - Future を処理するための Akka Dispatcher の使用
スプレー ベースの HTTP サービスがあります。この HTTP アプリケーション内で実行されるストリームがあります。このストリームは多くの I/O を行うため、別のスレッド プールを使用することにしました。Akka のドキュメントを調べて、スレッド プールを構成可能にするために何ができるかを確認しました。Akka で Dispatcher の概念に出くわしました。だから私は私のapplication.confで以下のようにそれを使用しようとしました:
私のアクターでは、この構成を次のように検索しようとしました。
サービスを実行すると、次のエラーが発生します。
私の質問は次のとおりです。
私が作成したこの io-dispatcher スレッド プールは、アクターのみに使用されることを意図したものですか? 私の意図は、アクタの 1 つによってインスタンス化されるストリームにこのスレッド プールを使用することでした。次に、このスレッド プールを自分のストリームに渡します。
application.conf からディスパッチャーをロードするだけで ExecutionContext を作成するにはどうすればよいですか? スレッド プールの構成を読み取り、ExecutionContext を提供する特定のライブラリを使用する必要がありますか?
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 ルーターまたはそのディスパッチャーに渡すことはできますか?