質問: なぜ "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がそうでないかどうか疑問に思っています。
回答: デフォルトでは、Linuxの `top` はいわゆるIRIXモードで動作しますが、Windowsのタスクマネージャは動作しません。 4つのコアがあるとしましょう: * IRIXモードをオンにすると、1つの完全に使用されるコアは100%であり、4つのコアは400%です。 * IRIXモードをオフにすると、完全に使用されるコアは1つが25%、4つのコアが100%になります。 つまり、デフォルトでは、Linuxの `top` は無限ループを〜100%として表示し、Windowsは〜25%として表示し、まったく同じことを意味します。 `top` が `Shift` + `i` で実行されているときに、IRIXモードを切り替えることができます。これは、数字が一致するようになります。