0

スレッドを 1 ~ 2 マイクロ秒中断する方法はありますか? (注 1 マイクロ秒 = 1/1000 ミリ秒)。この質問が聞かれたことは知っていますが、これまでのところ、これに対する良い答えはありません。これが必要な理由は次のとおりです。

クライアントのリクエストに対応するために複数のスレッドが実行されているサーバーがあります。要求は、時折発生する共有メモリを介して他のスレッドによって送信されます。ただし、リクエストが送信されたら、できるだけ早く処理する必要があります。そのため、リクエストが共有メモリでキューに入れられたときに、処理中のスレッドの 1 つに通知するための高速な方法が必要です。

Windows イベント オブジェクトが使用されましたが、マシンで SetEvent() から WaitForSingleObject() が返されるまでに 6 ~ 7us かかります (プロセス/スレッドの優先順位を設定しようとしましたが、まだあまり改善されていません)。ビジー ループを使用して、サービス スレッドがメモリをプールし続けるようにして、レイテンシを 1 ~ 2us に下げました。マイクロ/ナノ秒のスリープをループに挿入できれば、レイテンシを低く保ちながら、少なくとも CPU を解放できます。

2us 未満のレイテンシでスレッド通信を行う別の方法を誰かが提案してくれたらうれしいです。ありがとう

4

1 に答える 1

1

その期間、スレッドをスリープ状態にすることはできないと思います。

最後にテストしたとき (約 10 年前、Windows 2000 で) 13 ミリ秒未満のスリープで、0 ミリ秒または 13 ミリ秒のスリープになりました。

Windows はリアルタイム オペレーティング システムではありません。

高解像度タイマーを使用して、その期間スレッドをスピンできます。

正直なところ、それはほぼ確実に設計に欠陥があることを意味します.

今投稿を読みました。問題はスレッドモデルです。ワーカープールがあります。これには本質的にクロススレッド通信が必要であり、OS サービスが必要なため問題があります。別の方法として、コアごとに 1 つのスレッドがあり、それらのスレッド間で対称性があります。たとえば、すべてのスレッドがすべてを実行し、それらの間で負荷を共有します。

于 2012-06-23T21:20:38.587 に答える