Использование iocp в пуле заданий - PullRequest
0 голосов
/ 20 июля 2010

При использовании iocp в пуле заданий / задач для обеспечения быстрого пробуждения рабочих, каков наилучший способ минимизировать накладные расходы на сигнализацию порта - т. Е. Не делать это при каждой операции очереди?

void Worker() { while(1) { for(int spin = 0; spin < 5000; ++spin) while(queue.Count > 0) queue.PopFront()();</p> <pre><code> WaitOnCompletionPort(); }

}

...

queue.PushBack (someWork); // решить, когда сигнализировать порт завершения, но избегать делать это при каждой операции очереди?

Например, в приведенном выше наброске грубого кода существует проблема между работой, находящейся в очереди, и вводом ожидания, если вы попытаетесь избежать сигнализации порта при каждой операции очереди.

1 Ответ

1 голос
/ 20 июля 2010

Почему вы не используете IOCP в качестве своей очереди и не публикуете свои рабочие элементы прямо в нее? Таким образом вы бесплатно получаете потокобезопасную очередь и можете полностью удалить другую имеющуюся у вас очередь?

Этот вопрос потом уйдет;)

...