問題タブ [busy-loop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 15 ミリ秒未満のビジー待機が一貫していないのはなぜですか?
私は、10 から 50 ミリ秒の間、何百もの CPU バウンド ジョブを実行するシミュレーション プロジェクトを行っています。Job は、ジョブが CPU ビジー状態を維持する実行時間を指定した Runnable オブジェクトです。スレッド プールには、ジョブの到着を待機している 10 個のスレッドがあります。リクエスト レートを 1 秒あたり 40 リクエストに設定し、すべてのジョブの実行時間を 10 ミリ秒に設定しました。しかし、結果はとてもひどいものです。すべてのジョブは少なくとも 15 ミリ秒実行されます。10 ミリ秒実行されるジョブはありません。15ms のジョブで実験をテストしたところ、正しい結果が得られました。10 ミリ秒のジョブが少なくとも 15 ミリ秒実行されるのはなぜですか? (私は WINDOWS8 を使用しています)。
c - ビジーウェイトループの可変性能?
一貫した間隔でイベントを起動するためのビジー待機ループのパフォーマンスを評価しています。次のコードを使用すると、奇妙な動作に気付きました。
テスト マシン (デュアル 14 コア E5-2683 v3 @ 2.00Ghz、256GB DDR4) では、for ループの 200k 反復は約 1ms です。またはそうでないかもしれません:
3 回目のシフトダウンでは、数百回の反復で約 450us に跳ね上がることがありますが、ほぼ一貫しています (約 2 または 3 マイクロ秒以内)。この動作は、同様のマシンで、多くの実行にわたって再現可能です。
ビジー ループがコンパイラによって最適化される可能性があることは理解していますが、ここでの問題ではないと思います。無効化は行われるべきではなく、突然の最適化を説明しないため、キャッシュが影響を与えるべきではないと思います。また、ループ カウンターにレジスタ int を使用してみましたが、顕著な効果はありませんでした。
何が起こっているのか、これを(より)一貫させる方法について何か考えはありますか?
編集: 詳細については、usleep、nanosleep、または示されているビジー待機を使用してこのプログラムを実行すると、10k の反復がすべて表示され、~20000 の非自発的なコンテキスト スイッチが表示されtime -v
ます。