演员的理解threadedness我已经告诉(斯卡拉)演员从来没有真正在同一时间执行两个操作,这表明该行为(或反应?或接受?)方法本质上是同步的。我知道在行为方式长时间操作可能导致阻塞的问题,我认为访问消息队列必须以某种方式进行同步......但是在斯卡拉
什么建议是一个演员接收消息告诉它增加一个内部计数器会以线程安全的方式增加计数器。没有两个更新消息会被同时处理,因此没有两个消息可能会尝试同时更新计数器。
在一个演员的计数器属性听起来像“共享状态”。
这样的操作确实是完全线程安全的吗?如果是这样,一个演员如何以一种有效的方式使用多个核心机器?一个演员如何多线程?
如果没有,什么是适当的习惯的方法,而不需要一些同步/ volatile变量来计算在线程方式的消息?
这是一个很好的解释,谢谢! – Brian
很好的答案。我会补充说,虽然一个参与者的反应可以运行在不同的线程上(因此“通常”会受到内存访问问题的影响),但实际上并不需要同步访问参与者的状态。这是因为演员框架在执行演员之前已经这样做了。请参阅http://stackoverflow.com/questions/1031167/should-my-scala-actors-properties-be-marked-volatile –
很高兴它有帮助。 Régis:谢谢,更新文本更加精确。 – ron