我目前正在学习Scala中的演员。本书建议使用react
方法而不是receive
,因为它允许系统使用更少的线程。
我看过why creating a thread is expensive。但是,一旦你拥有了线程(在初始化之后应该在Scala中保存actor系统)的原因是什么,将它们包含在内是否很昂贵?
主要是内存消耗吗?还是有其他原因吗?
答案 0 :(得分:10)
使用多个线程可能比您预期的更昂贵,因为:
答案 1 :(得分:2)
除了线程周围的内存开销(可能会或可能不会很小)之外,拥有更多线程通常也意味着在需要选择哪个线程时,时间表将有更多元素要考虑接下来获得CPU。
某些操作系统/ JVM也可能对可以同时存在的线程数量有限制。
最终,这是一个小额管理费用的积累,最终可能会占很大比例。这些都不是Java特有的。
答案 2 :(得分:2)
拥有线程并不“昂贵”。当然,这有点取决于我们在这里谈论多少。我怀疑数十亿个线程会成为一个问题。我认为一般来说,拥有大量线程被认为是昂贵的,因为你可以做更多的并行工作,因此CPU上升,内存增加等等......但如果它们被正确管理(例如汇集以保护系统资源)那么没关系。 JVM不一定使用本机线程,因此Java线程不一定映射到OS本机线程(例如,查看绿色线程或轻量级线程)。在我看来,JVM中的线程没有隐含的成本。成本来自糟糕的线程管理和过度使用资源,不小心分配它们的工作。