当前位置: 首页 > 面试题库 >

Java多线程程序如何能够使用多个CPU内核?

夏和雅
2023-03-14
问题内容

有人可以提供解释,说明当JVM仅是Linux上的单个进程时,Java多线程程序(例如Tomcat
servlet容器)如何能够使用CPU的所有内核?有没有很好的深入文章详细介绍了该主题?

编辑#1 :我不是在寻找有关如何在Java中实现多线程程序的建议。我正在寻找有关JVM如何在Linux /
Windows上内部管理以使用多个内核而仍是OS上的单个进程的解释。

编辑#2 :我设法找到的最佳解释是,Hotspot(Sun / Oracle
JVM)使用NPTL在Linux上将线程实现为本机线程。因此,Java中的每个线程更少的是Linux上的轻量级进程(本机线程)。使用ps -eLf命令不仅可以输出进程ID(PPID),还可以输出本机线程ID(LWP),从而清晰可见。

更多详细信息也可以在这里找到:

  • http://www.velocityreviews.com/forums/t499841-java-5-threads-in-linux.html
  • 区分Java线程和OS线程?

编辑#3
:Wikipedia在NPTL上有简短但不错的条目,并提供了更多参考文献http://en.wikipedia.org/wiki/Native_POSIX_Thread_Library


问题答案:

Linux内核支持线程作为一等公民。实际上,对于内核来说,线程与进程没有太大区别,只是线程与另一个线程/进程共享一个地址空间。

某些旧版本ps甚至在默认情况下甚至为每个线程显示了一个单独的进程,而较新的版本可以使用该-m标志启用此行为。



 类似资料:
  • 问题内容: 假设我的应用程序运行2个线程(例如渲染线程和游戏更新线程)。如果它运行在具有多核CPU的移动设备上(当今通常是这样),我是否可以期望在可能的情况下自动将线程分配给不同的内核? 我知道底层的OS内核(Android linux内核)决定调度。我的问题是我是否需要做 任何其他事情 才能启用多核功能,还是自动而透明的? 问题答案: 您需要做的是允许两个线程尽可能独立地运行。如果您有两个始终在

  • 问题内容: 我正在编写一个使用大量CPU的Java程序,因为它的工作性质。但是,许多程序可以并行运行,并且我使程序成为多线程的。当我运行它时,似乎只使用一个CPU直到需要更多的CPU,然后再使用另一个CPU- 我可以用Java强制其他操作在不同的内核/ CPU上运行吗? 问题答案: 当我运行它时,它似乎只使用一个CPU直到需要更多的CPU,然后再使用另一个CPU-我可以用Java强制其他操作以在不

  • 首先,我的问题是,为什么编译线程占用大量的CPU,以及如何最小化这一点,以便我们可以将CPU分配给其他线程。 提前感谢!

  • 问题内容: 为了在Linux上开发高度网络密集型服务器应用程序,首选哪种架构?这个想法是,该应用通常可以在具有多个内核(虚拟或物理)的机器上运行。考虑到性能是关键标准,选择多线程应用程序还是采用多进程设计更好?我确实知道资源共享和从多个进程访问此类资源的同步是很多编程开销,但是如前所述,整体性能是关键要求,因此我们可以忽略这些事情。编程语言为C / C ++。 我听说,即使是多线程应用程序(单个进

  • 问题内容: 我最近继承了一个小型Java程序,该程序从大型数据库中获取信息,进行一些处理并生成有关该信息的详细图像。原始作者使用单个线程编写了代码,然后对其进行了修改,以使其可以使用多个线程。 他在代码中定义了一个常量; 然后,它设置用于创建映像的线程数。 我理解他的理由,即线程数不能大于可用处理器的数目,因此将其设置为可以充分发挥处理器潜力的数量。这样对吗?还是有更好的方法来充分利用处理器的潜力

  • 我运行一个大型的minecraft服务器,minecraft服务器端是单线程的。一切都是在主游戏循环中完成的。如果Mojang使minecraft服务器端多线程化,minecraft服务器每年将节省200万美元,因为租用的硬件更少。 不管怎样,我听说过这些谣言和理论。我从来都无法用谷歌搜索并弄清楚。 有没有必要使用多核cpu,并将其转换为单核、单线程? 我一直在猜测虚拟机管理程序软件将运行多线程,