首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我有一个多线程JAVA应用程序,它在一个有N个内核的CPU上运行(在Linux上),但是它只使用第0个内核,其余的内核都是空闲的

我有一个多线程JAVA应用程序,它在一个有N个内核的CPU上运行(在Linux上),但是它只使用第0个内核,其余的内核都是空闲的
EN

Stack Overflow用户
提问于 2018-09-04 16:01:07
回答 1查看 156关注 0票数 0

如果我没记错的话,JVM依赖于操作系统的底层架构来调度线程并将其分散到其他核心(当一个线程产生时)。但是,在我的应用程序中,我没有看到这种情况发生。每个线程都在第0个内核上运行,其余N-1个内核处于空闲状态。有没有发生这种情况的具体原因,还有,如何解决这个问题,以便我可以利用我的其余内核?

我知道设置进程亲和性,但在某种程度上,也就是将进程硬编码到特定的核心。由于线程可以在任何给定点产生,因此它应该由空闲的内核处理。

代码片段,例如

代码语言:javascript
复制
public static void main() {

R1 r1 = new R1();
R2 r2 = new R2();
Thread t1 = new Thread(r1);
Thread t2 = new Thread(r2);

t1.start();
t2.start();
}

有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2018-09-04 19:39:39

几乎可以肯定的是,您的应用程序中有一些东西导致JVM不能同时运行多个应用程序线程。

问题将出现在R1R2类中,或者它们所依赖的其他类中。既然你决定不向我们展示它们,我们只能猜测它可能是什么。然而,一种常见的解释是,其中一个线程(运行您的代码)持有另一个线程试图获取的锁。这足以使您的应用程序有效地单线程。

建议:

  • 使用jstack实用程序来获取应用程序的线程转储,并查看堆栈跟踪以了解线程在做什么,以及其中一个线程被阻塞的原因。
  • 使用调试器运行应用程序,并将您的时间浪费在调查调度程序、线程亲和性或诸如此类的事情上。他们不太可能帮助你解决问题。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52161533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档