是什么让演员如此轻盈?
我什至不确定它们是如何工作的。它们不是单独的线程吗?
当他们说轻量级时,他们的意思是每个参与者都没有映射到单个线程。
JVM 提供共享内存线程
锁作为主要形式
并发抽象。但分享了
内存线程是相当重量级的
并招致严重的绩效处罚
来自上下文切换开销。为了
一个基于Actor的实现
与 JVM 线程一对一映射,
每个 Scala actor 的进程负载
不会像我们那样轻量
生成一百万个 Actor 实例
来进行具体的计算。因此
Scala actor 被设计为
轻量级事件对象,它得到
计划并执行于
底层工作线程池
当全部时自动调整大小
线程长时间运行时会阻塞
运营。事实上,Scala 实现了
参与者的统一模型 - 线程
基于和基于事件。斯卡拉演员
提供两种形式的悬挂
机制 - 完整的堆栈框架
暂停(实现为接收)和
基于延续的暂停
闭包(作为 React 实现)。在
基于事件的参与者的情况,等待
React 由一个 Continue 表示
闭包,即捕获
演员的其余计算。
当被暂停的演员收到
与其中之一匹配的消息
演员指定的模式,
延续是通过调度执行的
将任务分配给工作线程之一
来自底层线程池。这paper http://lamp.epfl.ch/~phaller/doc/haller07actorsunify.pdf“统一线索和
事件”,作者:Haller 和 Odersky
讨论了细节
执行。
Source http://java.dzone.com/articles/scala-threadless-concurrent
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)