在scala中说,与传统的线程相比,使用actor可以更好地扩展。我能理解有点像保持线程阻塞显然不是很好。但线程调度新任务和线程上下文切换有什么区别? 是不是这种安排新任务也会招致绩效惩罚?
在.NET中也有类似的情况,async做类似的事情,我不明白这里的线程切换从状态机切换到未完成的任务与上下文切换发生在线程上的差异,毕竟是什么的区别?答案 0 :(得分:0)
首先,我不认为我的问题是重复的参考链接。 其次,我认为所提到的问题没有得到妥善回答。但它们提供了一些相关的信息,可以解释我的问题。
重要Actors that Unify Threads and Events - Philipp Haller, Martin Odersky
演员的重量不是很轻,这可以从参考文件的基准来看出。 对于基于线程的actor,每个线程的actor,所以基本相同 对于基于事件的actor,当actor反应时,它的状态将被持久化到线程队列,一个新的actor状态将被切换,所以在某种意义上工作线程中发生了数据切换,但是没有发生内核调用我认为这是与演员数据交换机相比最显着的差异
重要的是actor在可扩展性方面是优选的,我们可以从参考文献中看到,当流程不是那么多时,吞吐量甚至比传统的Java并发性还要小。