なぜ "while(true)"で "Thread.sleep"を指定しないと、Linuxでは100%のCPU使用率が発生しますが、Windowsでは使用できません。

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

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

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

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

私は、Windowsのスケジューラがランダムにスレッドをプリエンプトし、Linuxがそうでないかどうか疑問に思っています。

156
nl ru de
@クオイ本当にそうではありません。そのプログラムがすべて実行されている場合、スレッドはWindowsとLinuxの両方で中断することなく実行されます。
追加された 著者 David Heffernan,
オペレーティングシステムのタスクスケジューリングに依存します。
追加された 著者 Subhrajyoti Majumder,
コアの数はいくつですか?すべてのコアがビジーの場合、Windowsタスクマネージャは100%を報告します。あなたのLinuxツールは何か似たようなことをしていますか、1つのコアの作業の100%を報告していますか?また、すべてのコアがビジー状態の場合、 100 * N core%ですか?
追加された 著者 yiding,
私は4つのコアを持っており、Linux上で私はシステムモニタツール
追加された 著者 Maniek,

1 答え

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

  • IRIXモードをオンにすると、1つの完全に使用されるコアは100%であり、4つのコアは400%です。

  • IRIXモードをオフにすると、完全に使用されるコアは1つが25%、4つのコアが100%になります。

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

top Shift + i で実行されているときに、IRIXモードを切り替えることができます。これは、数字が一致するようになります。

386
追加された
@thatotherguy正確にshift-Iを押すとトグルするでしょうか?トップは走っていますか?
追加された 著者 Geek,
@ uDaY、1日に最大200人の担当者がいるので、それ以降のアップボントはカウントされず、受け入れられたアナウンスはまだなります。
追加された 著者 sa_ddam213,
うん、「4 + 4」i7(ハイパースレッディング)では、1つの些細なCPUループが約17-18%で出てきます。
追加された 著者 Martin James,
+1非常に良い答え。
追加された 著者 Peter Lawrey,
なぜ回答者は150UPsを持っているのですか?彼の得点は700です...それはバグですか? : - /
追加された 著者 uday,
+1の問題が解決しました。ありがとうございました :)
追加された 著者 Maniek,