C#にポーリングループがあり、平均 して100マイクロ秒ごとにポーリングする必要があります<EDIT>(もちろん、コア不足のためにWindowsによって実行される過度のプリエンプティブスレッドコンテキストスイッチがない場合)</EDIT>。
スケジュールを変更する時間がないため、Sleep(1)はスケジュールを変更しません。
そこで、スレッド(実際にはアフィニティを設定するときのコア)を専用にし、各反復の一連のサイクルにThread.SpinWaitを使用することにしました。これは正常に機能しますが、不必要な量の電力を消費します。100マイクロ秒は、CPUが一時停止するのに十分です(Windowsのタイムスライスが長くなるため、スレッドをスケジューラーから一時的に削除するのに十分ではありません)。
代わりに、Intel PAUSE命令を使用することを考えていましたが、IntelCPUがハードウェアスレッドを一時停止するトリガーになるかどうかはわかりません。Intelは、電力を維持し、スピンループで使用する必要があると主張していますが、一時停止は100マイクロ秒にもなるため、コアをC1モードでスリープ状態にする必要があります。
何か案は?
編集:サードパーティのAPIをポーリングしているので、ブロックする同期イベントはありません。