为什么akka默认使用ForkJoinPool线程池?用户actor的代码也不是map reduce算法,使用ForkJoinPool可以获益吗?

1 篇文章 0 订阅

为什么akka默认使用ForkJoinPool线程池?用户actor的代码也不是map reduce算法,使用ForkJoinPool可以获益吗?

参考一
参考二
参考三

Akka 如何从 ForkJoinPool 中受益?

Akka 文档指出默认调度程序是 fork-join-executor因为它“在大多数情况下提供出色的性能”。
我想知道为什么会这样?

ForkJoinPool 与其他类型的 ExecutorService 的不同之处主要在于其采用了工作窃取:池中的所有线程都尝试查找并执行提交到池或由其他活动任务创建的任务(如果不存在,则最终阻塞等待工作)。这使得**(1)当大多数任务产生其他子任务时(就像大多数 ForkJoinTasks一样),以及(2)当许多小任务从外部客户端提交到池时**,可以进行有效处理。尤其是在构造函数中将asyncMode设置为 true 时,ForkJoinPools 也可能**(3)适用于从未连接的事件式任务。**

Java ForkJoinPool与非递归任务,,工作窃取是否有效?

如果没有递归,工作窃取在 ForkJoinPool 中是否仍然有效?

  • ForkJoinPool 每个工作线程都有一个工作队列(我们称之为“worker queues")。fork tasks 别推入本地工作队列,准备再次被工作人员弹出并执行——换句话说,从工作线程的角度来看,它看起来像一个堆栈。当一个工作耗尽了它的工作队列时,它会四处寻找并试图从其他工作队列中窃取tasks。这就是工作窃取

  • 您可以重用工作队列可用的大多数机制。您甚至可以将这些提交队列松散地分发给每个工作线程。现在,外部提交进入其中一个提交队列。然后,没有工作可做的worker可以先查看与某个特定worker关联的提交队列,然后再四处查看其他worker的提交队列。人们也可以称之为“偷工作”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值