非常にばかげた質問になる可能性があります--
アクターが使用するスレッドを制御するように Akka/Scala アクターをカスタマイズすることは可能ですか? たとえば、スレッド プールで使用する独自のスレッド セットを初期化できますか。そうでなければ、スレッドを制御/変更できますか?
Akka では、スレッド プールは MessageDispatcher インスタンスを介して管理されます。アクターに必要なディスパッチャーを簡単に設定できます。
class MyActor( dispatcher: MessageDispatcher ) extends Actor {
self.dispatcher = dispatcher
...
}
独自のディスパッチャーを提供するには、拡張できますakka.dispatch.MessageDispatcher
(例については、既存のディスパッチャーの実装を参照してください)。ここでは、スレッドを直接操作できます。
もちろん、ディスパッチャ内にビジネス ロジックを配置するのは危険です。アクター モデルが壊れて、同時実行のバグが増える可能性があるからです。
私はそれを自分で理解しようとしましたが、Akka の連中がスレッド管理を公開したくないという縫い目です。
ThreadPoolConfig - ExecutorServiceインスタンスの作成を担当するクラスは、メソッド createExecutorService() がfinalと宣言されたケース クラスです。
final def createExecutorService(threadFactory: ThreadFactory): ExecutorService = {
flowHandler match {
case Left(rejectHandler) ⇒
val service = new ThreadPoolExecutor(...)
service
case Right(bounds) ⇒
val service = new ThreadPoolExecutor(...)
new BoundedExecutorDecorator(service, bounds)
}
}
そのため、独自の ExecutorService を提供する簡単な方法がわかりません。