「Thread.sleep」を使用せずに「while(true)」を実行すると、LinuxではCPU使用率が100%になりますが、Windowsでは発生しません


158

私はJavaで簡単なプログラムを作成しました:

public static void main(String[] args) throws InterruptedException {
    while (true) 
        ;
}

これをLinuxマシンで実行すると、100%のCPU使用率が表示されますが、OSが遅く見えることはありません。ただし、Windowsでまったく同じコードを実行すると、CPU使用率が約20%しか表示されません。

WindowsではOracle JRE、LinuxではOpenJDK 6を使用しています。

Windowsのスケジューラがスレッドをランダムにプリエンプトし、Linuxがプリエンプトしないのだろうか?


5
これは、オペレーティングシステムのタスクスケジューリングに依存します。
Subhrajyoti Majumder 2013

52
コアはいくつありますか?すべてのコアがビジーの場合、Windowsタスクマネージャーは100%を報告します。あなたのLinuxツールは似たようなことをしますか、それとも1コアの作業の100%を報告しますか、そしてすべてのコアがビジーであるとき、それはそう100*N cores %ですか?
2013年

2
私は4つのコアを持っており、Linuxではシステムモニターツールを使用しています
Maniek

1
@Quoiそうではありません。そのプログラムがすべて実行されている場合、スレッドはWindowsとLinuxの両方で中断されることなく実行されます。
David Heffernan 2013年

回答:


387

デフォルトではtop、LinuxではいわゆるIRIXモードで実行されますが、Windowsタスクマネージャでは実行されません。4つのコアがあるとします。

  • IRIXモードがオンの場合、1つの完全に使用されたコアは100%、4つのコアは400%です。

  • IRIXモードがオフの場合、完全に使用されている1つのコアは25%、4つのコアは100%です。

つまり、デフォルトではtop、Linuxでは無限ループが〜100%と表示され、Windowsでは〜25%と表示されます。これはまったく同じことを意味します。

+ topで実行中にIRIXモードを切り替えることができます。これにより、数値が一致します。Shifti


2
うん-'4 + 4' i7(ハイパースレッディング)では、1つのささいなCPUループが約17-18%で出てきます。
マーティンジェームズ

なぜ回答者は150UPを持っているのに彼のスコアが700であるのですか...それはバグですか?:-/
2013年

5
@ uDaY、1日あたり最大200担当者がいるため、それ以降の賛成投票はカウントされませんが、承認された回答は引き続きカウントされます。
sa_ddam213 2013年

3
@thatotherguy Shiftキーを押して、いつ切り替えますか?トップが動いている間?
Geek
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.