【发布时间】:2012-09-06 03:16:59
【问题描述】:
有人告诉我,(Scala)Actor 实际上从不同时执行两个操作,这表明 act(或 react?或 receive?)方法本质上是同步的。我知道 act 方法中的长时间操作会导致阻塞问题,并且我假设必须以某种方式同步对消息队列的访问......但是......
建议的是,接收到告诉它递增内部计数器的消息的参与者将以线程安全的方式递增计数器。不会同时处理两条更新消息,因此没有两条消息可以尝试同时更新计数器。
actor 中的计数器属性听起来像“共享状态”。
这样的操作真的是完全线程安全的吗?如果是这样,演员如何以某种有效的方式利用多个核心机器?演员怎么是多线程的?
如果不是,那么以线程安全的方式对消息进行计数而不需要一些同步/易失变量的适当惯用方法是什么?
【问题讨论】:
标签: multithreading scala functional-programming actor