阿卡演员优先事项

Gre*_*reg 10 multithreading scala akka spray

我有一个基于actor的系统,它执行定期的,CPU密集的数据摄取以及RESTful端点.我正在使用Akka演员来发信号/控制摄取过程的各个阶段,而Spray(当然是建立在Akka上)来为我的休息端点提供服务.

我的问题是这样的:当摄取开始时它消耗了大部分CPU,使RESTful端点挨饿直到完成.

降低摄取优先级的最佳方法是什么?现在,摄取和Spray模块共享相同的ActorSystem,但如果这有助于解决方案,它们可以分开.

Mar*_*ila 9

您的系统中的不同演员似乎需要住在不同的调度员中.为CPU密集型演员创建一个新的调度程序,并将Web服务actor留在默认调度程序中(或者,如果您认为合适,也可以将这些调度程序移动到另一个调度程序)

您可能想要调整新创建的调度程序 - 例如,如果您说您的摄取演员执行计算密集型作业,您应该将调度程序的并行度降低到接近1.0的值

将您的actor系统分成不同的调度程序可以防止类似于您拥有的问题 - 如果某些actor开始占用底层线程,它们最终会使运行它们的调度程序饱和.通过将Web角色放在另一个调度程序中,可以限制CPU密集型角色对系统其余部分的影响.这有点类似于"批量"的概念.

以下是Akka调度员的更多信息:http: //doc.akka.io/docs/akka/2.2.0/scala/dispatchers.html

要配置新的调度程序,还需要查看文档的配置部分:http: //doc.akka.io/docs/akka/2.2.0/general/configuration.html