JVM应用程序中的许多线程是否昂贵?

rol*_*lve 7 multithreading jvm scala actor

我目前正在学习Scala中的演员.本书建议使用该react方法代替receive,因为它允许系统使用更少的线程.

我已经读过为什么创建一个线程很昂贵.但什么是是,一旦你的线程(应保持在初始化之后男主角系统斯卡拉)的原因,让他们周围是昂贵?

主要是内存消耗吗?还是有其他原因吗?

Vic*_*kin 10

使用多个线程可能比您预期的更昂贵,因为:

  • 每个线程都占用堆外部的内存,这限制了JVM可以创建多少个线程;
  • 从一个线程切换到另一个线程会消耗一些CPU时间,因此如果您有可以在单个线程中执行的活动,则可以节省CPU周期;
  • 有JVM调度程序,如果有更多线程,还有更多工作要做.同样适用于底层OS调度程序;
  • 最后,使用比CPU内核更多的线程用于CPU绑定任务没有多大意义,使用比I/O活动更多的I/O线程(例如,网络客户端)没有多大意义.

  • 值得注意的是,"JVM调度程序"注释意味着您的GC暂停会稍微增加(因为将所有线程带到安全点所需的时间更长),可能在年轻代停顿时更明显 (4认同)