スレッドを1〜2マイクロ秒間中断させる方法はありますか? (注1マイクロ秒= 1/1000ミリワット)。私はこの質問が尋ねられたことを知っていますが、これまではこれに対する良い答えはありません。私がこれを必要とする理由は次のとおりです。低遅延スレッド通信のためのWindowsスリープマイクロ秒
クライアントの要求に対応するためにいくつかのスレッドが実行されているサーバーがあります。要求は、時々発生する共有メモリを介して他のスレッドによって送信されます。ただし、要求が送信されるとすぐに処理する必要があります。だから、要求が共有メモリに入れられたときにサービススレッドの1つに通知するための速い方法が必要です。
Windowsイベントオブジェクトが使用されましたが、SetEvent()からWaitForSingleObject()に6〜7秒かかる(プロセス/スレッドの優先順位を設定しようとしましたが、改善はあまりありません)。私はビジーなループを使用して、処理中のスレッドがメモリをプールして待ち時間を1〜2秒に短縮することを試みましたが、それは十分ですが、リクエストが1分に1回しか送られない間CPUを焼き付けます。私がループにマイクロ/ナノ秒の睡眠を挿入することができれば、レイテンシーを低く保ちながら少なくとも私のCPUを無料にすることができます。
2us以下のレイテンシでスレッド通信を行う方法を誰かに教えてもらえれば嬉しいです。ありがとう
この方向には行かないでください。このようなシナリオ(リアルタイムアプリケーションではない)でのこのような睡眠の必要性だけで、IMHOは壊れた設計を示しています。 – Matthias
これは "カーネルリング"でのみ確実に実行できると思います。 –
Bus-waitingを行うための「より安価な方法」であるThread.SpinWait()があります。しかし、_「リクエストは1分に1回だけ送信されます」_は実行しないことを意味します。どのように分単位の状況で問題が発生していますか? –