我注意到JVM线程由于某些原因在Linux下作为进程运行(如果我错了,请纠正我)。此外,英特尔的超线程仅为属于同一进程的两个线程提供了额外的并行化。
这是否意味着单个多管理JVM程序不从Linux下的超线程中获利,因为它的线程不是来自CPU的线程“观点”?
答案 0 :(得分:11)
Linux中的调度程序不会区分进程和线程。根据{{3}}系统调用的定义,流程可以共享一系列资源。通常使用的线程和进程只是常用配方的名称。
如果您将线程视为JVM中的进程,那么这只是命名法的混合。通过通常的定义,如果进程共享一个虚拟地址空间,那么它们就是进程中的“线程”。
无论使用何种术语,所有硬件调度都将受益于超线程。同样公平地说,超线程不允许您并行运行更多线程:它使上下文切换更快,从而使进程有更多的运行时间。
答案 1 :(得分:1)
“JVM线程在Linux下作为进程运行” - 不能以LWP(轻量级进程)运行。
Java线程在内部实现为本机线程,即LWP(在Linux中),您可以使用ps -eLf
查看它们。虽然本机线程和java线程之间的映射很困难。唯一可以轻松映射的线程是主线程,因为它的id与进程ID相同。
JVM肯定会从HT中获利。
来自HT in java的文章:
SMT承诺显着增加Java的服务器端 通过更充分地利用现有处理器周期来实现性能 多线程应用程序。