使用Actors来开发核心

Mal*_*lio 5 scala actor

我是Scala的新手,特别是Actors,我的问题是如此基本,我发现的在线资源并没有涵盖它.

我有一个CPU密集型,易于并行化的算法,将在n核机器上运行(我不知道n).如何在Actors中实现这一点,以便所有可用的内核解决问题?

我想到的第一种方法是简单地将问题分解成m个部分(其中m是一些像10,000的中等数字)并创建m个 Actors,每个部分一个,给每个Actor一个小部分,然后让它们去.

不知何故,这让我觉得效率低下.数以万计的演员只是闲逛,等待一些CPU爱,毫无意义地切换上下文......

然后我想,制作一些数量较少的Actors,然后每一个都要喂几个.问题是,没有理由期望这些部分的大小相同,因此一个核心可能会陷入困境,其中许多任务仍然排队,而其他核心则处于空闲状态.

我和一位知道哪位演员忙碌的主管在一起,并最终意识到这必须是一个已解决的问题.必须有一个标准模式(甚至可能是标准库)来处理这个非常通用的问题.有什么建议?

Jon*_*ffe 8

看看Akka图书馆,其中包括演员的实现.该调度员模块为您提供了限制演员CPU线程(基于HawtDispatch事件驱动)和/或平衡工作负载(工作偷窃事件为主)更多的选择.