斯卡拉:为什么演员轻量级?

时间:2010-03-13 17:27:26

标签: scala actor

是什么让演员如此轻量级?

我甚至不确定它们是如何工作的。他们不是分开的线程吗?

2 个答案:

答案 0 :(得分:17)

当他们说轻量级时,他们意味着每个actor都没有映射到单个线程。

  

JVM提供共享内存线程   锁作为主要形式   并发抽象。但是分享了   内存线程非常重量级   并导致严重的性能惩罚   来自上下文切换开销。对于   基于a的actor实现   使用JVM线程进行一对一映射,   每个Scala actor的进程负载   不会像我们那样轻巧   产生一百万个演员实例   用于特定的计算。于是   Scala演员被设计为   得到的轻量级事件对象   预定并执行   底层工作者线程池   全部自动调整大小   线程阻止长时间运行   操作。实际上,Scala实现了   统一的演员模型 - 线程   基于事件和基于事件。斯卡拉演员   提供两种形式的暂停   机制 - 完整的堆栈框架   暂停(实施为接收)和   基于延续的暂停   关闭(实施为反应)。在   基于事件的演员案例,等待   反应由延续表示   闭合,即捕获的闭合   演员计算的其余部分。   当被停职的演员收到一个   与之一匹配的消息   演员指定的模式,   继续通过调度执行   任务到一个工作线程   来自底层线程池。该   paper“统一线程和线程的参与者   事件“由哈勒和奥德斯基   讨论了细节   实施

Source

答案 1 :(得分:0)

重要参考Actors that Unify Threads and Events

我认为我们不应该强化那个轻量级的演员。

首先,基于线程的actor是每个线程的actor,所以根本不是轻量级的。

基于事件的演员是我们开始觉得演员重量轻的地方。它重量轻,因为它没有工作线程等待并切换到另一个,工作线程只是从一个数据工作切换到另一个数据工作,因此保持旋转有效的计算。