0

在作业/任务池中使用 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 ?

例如,在上面的粗略代码草图中,如果您尝试避免在每次队列操作时向端口发送信号,则在工作排队和进入等待之间存在问题。

4

1 回答 1

1

为什么不使用 IOCP 作为队列并将工作项直接发布到它?这样您就可以免费获得一个线程安全队列,并且可以完全删除您拥有的其他队列?

然后这个问题就会消失;)

于 2010-07-20T07:16:20.040 回答