ジョブ/タスク プールで iocp を使用してワーカーのウェイクアップを高速化する場合、ポートのシグナリングのオーバーヘッドを最小限に抑える最善の方法は何ですか?
void Worker()
{
while(1)
{
for(int spin = 0; spin < 5000; ++spin)
while(queue.Count > 0)
queue.PopFront()();
WaitOnCompletionPort();
}
}
...
queue.PushBack(someWork);
// decide when to signal completion port but avoid doing it every queue operation ?
たとえば、上記の大まかなコード スケッチでは、キュー操作のたびにポートに信号を送ることを避けようとすると、キューに入れられている作業と開始されている待機の間に問題があります。