私は、10 から 50 ミリ秒の間、何百もの CPU バウンド ジョブを実行するシミュレーション プロジェクトを行っています。Job は、ジョブが CPU ビジー状態を維持する実行時間を指定した Runnable オブジェクトです。スレッド プールには、ジョブの到着を待機している 10 個のスレッドがあります。リクエスト レートを 1 秒あたり 40 リクエストに設定し、すべてのジョブの実行時間を 10 ミリ秒に設定しました。しかし、結果はとてもひどいものです。すべてのジョブは少なくとも 15 ミリ秒実行されます。10 ミリ秒実行されるジョブはありません。15ms のジョブで実験をテストしたところ、正しい結果が得られました。10 ミリ秒のジョブが少なくとも 15 ミリ秒実行されるのはなぜですか? (私は WINDOWS8 を使用しています)。
public class CpuBoundJob implements Runnable {
long runningTime
public CpuBoundJob(long runningTime) {
this.runningTime=runningTime;
}
@Override
public void run() {
long timeToWait = this.runningTime;
long startTime = System.currentTimeMillis();
while(startTime + timeToWait > System.currentTimeMillis());
}
}