Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 使用PinnedDispatcher的Akka平衡池_Multithreading_Scala_Akka - Fatal编程技术网

Multithreading 使用PinnedDispatcher的Akka平衡池

Multithreading 使用PinnedDispatcher的Akka平衡池,multithreading,scala,akka,Multithreading,Scala,Akka,我有几个数据库IO操作要同时运行。在我的情况下,最好使用平衡池路由器 文档说,如果阻塞操作要在worker中发生,那么应该使用线程池执行器,而不是默认的fork-join调度程序 我不想在Akka conf文件中配置它,所以我认为这是在代码中进行配置的方法: val router = context.actorOf(BalancingPool(5).withDispatcher("my-pinned-dispatcher").props(Props[History]),

我有几个数据库IO操作要同时运行。在我的情况下,最好使用平衡池路由器

文档说,如果阻塞操作要在worker中发生,那么应该使用线程池执行器,而不是默认的fork-join调度程序

我不想在Akka conf文件中配置它,所以我认为这是在代码中进行配置的方法:

  val router = context.actorOf(BalancingPool(5).withDispatcher("my-pinned-dispatcher").props(Props[History]), "HistoryBalancingRouter")
但文件上说,对于PinnedDispatcher:

该调度器为使用它的每个参与者指定一个唯一的线程; i、 每个参与者都有自己的线程池,其中只有一个线程 游泳池

邮箱:任何,每个参与者创建一个邮箱

而对于BalancingPool,它说员工共享一个邮箱:

平衡池自动使用一个特殊的平衡调度器 它的路由-忽略在 routee道具对象。这是实施该计划所必需的 通过所有路由对象共享同一邮箱来平衡语义

虽然无法更改路由对象使用的调度程序, 可以微调所使用的执行器默认情况下 使用fork join dispatcher,可以按照中的说明进行配置 调度员在预期路由执行的情况下 阻塞操作将其替换为 暗示已分配线程数的线程池执行器 明确地

那么,邮箱和线程到底发生了什么


我的示例是使用线程池执行器实现平衡池的明智方法吗?

平衡池始终与平衡调度程序一起工作,它只会拒绝您的PinnedDispatcher设置。原因正是BalancingDispatcher允许参与者共享一个其他Dispatcher不支持的公共邮箱(用于性能)

请注意,有几个分派器允许您配置它们将在内部使用的执行器。默认情况下,对于BalancingPool,它是
fork join executor
(文档错误地说是“fork join dispatcher”),但您可以将其更改为使用
线程池执行器。这里有一个调度程序配置示例:您只需要更改执行器类型