在 scala 中说,与传统线程相比,使用演员可以更好地扩展。我可以理解,有点像保持线程阻塞显然不好。但是线程调度新任务和线程上下文切换有什么区别呢?这种调度新任务不是也会导致性能损失吗?
.NET 中也有类似的情况,异步做类似的事情,我不明白线程从状态机切换到未完成任务的区别,上下文切换发生在线程上,毕竟有什么区别?
首先,我不认为我的问题是引用链接的重复。其次,我认为所提到的问题没有得到正确回答。但他们提供了一些相关信息,可以阐明我的问题。
统一线程和事件的重要角色 - Philipp Haller、Martin Odersky
Actor 根本没有那么轻,这可以从参考论文中的基准中得出结论。对于基于线程的actors,每个线程的actors,所以对于基于事件的actors本质上是相同的,当actors做出反应时,它的状态将被持久化到线程队列中,一个新的actor状态将被切换,所以在某种意义上存在数据切换发生在工作线程中,但没有发生内核调用,我认为这是与参与者数据切换相比最显着的区别
重要的是actor在可扩展性方面更胜一筹,从参考论文中可以看出,当进程不多时,吞吐量甚至低于传统的java并发。