双核CPU利用率w/单Java线程运行

双核CPU利用率w/单Java线程运行,java,multithreading,operating-system,utilization,Java,Multithreading,Operating System,Utilization,可能重复: 我在双核机器(WindowsXP32位环境)上运行了一个简单的Java线程 publicstaticvoidmain(String[]strs){ 长j=0; 对于(长i=0;i,正如您所提到的,操作系统将跳转线程 int main( int argc, char** argv ) { while( true ); return 0; } 如果你看一下这个过程,它会一直保持在25%(使用四核),但是Windows 7的资源监视器显示,4个核中没有一个是100%不变

可能重复:

我在双核机器(WindowsXP32位环境)上运行了一个简单的Java线程

publicstaticvoidmain(String[]strs){
长j=0;

对于(长i=0;i,正如您所提到的,操作系统将跳转线程

int main( int argc, char** argv )
{
    while( true );
    return 0;
}
如果你看一下这个过程,它会一直保持在25%(使用四核),但是Windows 7的资源监视器显示,4个核中没有一个是100%不变的,即使核心0的使用率高于其他核

内核之间的缓存不可用,因此此行为并不意味着缓存未被使用。


当操作系统执行线程时,它会将每个线程运行一段时间(比如10-20ms),然后保存线程的状态,并查找其他要运行的线程

现在,不管你从CPU利用率图上看会怎么想,操作系统实际上运行的线程比你程序中运行的线程多得多。有运行UI循环的线程、等待I/O的线程、运行后台服务的线程等等。大多数线程的大部分时间都花在等待某些东西上

我之所以谈论这一点,是为了解释从操作系统的角度来看,情况比看起来更复杂。有一大堆线程在做一大堆事情,而操作系统正试图在它们之间切换。假设您想要实现一种启发式,如果一个线程耗尽了它的整个量子,那么此时,操作系统将努力将其调度到同一个核心。操作系统需要跟踪并考虑更多信息,优化的成功可能取决于许多难以预测的因素

此外,在实践中,将线程与核心关联的好处通常可以忽略不计,因此操作系统不会尝试自动执行。相反,它们公开了一项功能,允许开发人员明确表示特定线程应与核心关联,然后操作系统将尊重该决定


这似乎是一个合理的权衡:如果你的线程在与一个内核密切相关时表现得更好,那么就让操作系统来做吧。但是,操作系统不会为你费心去弄清楚它。

是的,操作系统会跳转线程。我想这个问题已经得到了回答,并且知道大多数Java程序都会尝试使用一个内核和一个内核我在Minecraft上发现,tay只有一个内核。这是一个关于一个人的故事,他是在他的新电脑@ParioCreations上发现的。另一个问题是关于多线程应用程序的。这个问题是关于单线程应用程序的。@ParioCreations是的,这是一个单线程的Senario。有没有官方/文档解释为什么和ho“什么是反弹线程?”StephenC想了解更多关于it@njzhxf-那你为什么需要一个“官方”的解释呢?(我不认为你会在微软的网站上找到这样的东西……这是你需要查找的地方。)
int main( int argc, char** argv )
{
    while( true );
    return 0;
}