161

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

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

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

WindowsではOracleJREを使用し、LinuxではOpenJDK6を使用しています。

Windowsのスケジューラーがスレッドをランダムにプリエンプトし、Linuxのスケジューラーがプリエンプトしないのではないかと思います。

4

1 に答える 1

393

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

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

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

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

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

于 2013-01-29T09:11:26.663 に答える