在作业/任务池中使用 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 ?
例如,在上面的粗略代码草图中,如果您尝试避免在每次队列操作时向端口发送信号,则在工作排队和进入等待之间存在问题。