Javaで簡単なプログラムを作成しました。
public static void main(String[] args) throws InterruptedException {
while (true)
;
}
Linuxマシンでこれを実行すると、CPU使用率が100%になりますが、OSが遅く見えることはありません。ただし、Windows上でまったく同じコードを実行すると、CPU使用率は約20%しか表示されません。
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
の実行中にIRIXモードを切り替えることができます Shift+i。これにより、数字が一致します。