Привет, я занимаюсь передачей потоков, используя быструю и надежную очередь потребителей-производителей. Я работаю над Windows с VС++.
Я основывал свой дизайн на Anthony Williams, то есть, в основном, boost:: mutex с boost:: condition_variable. Теперь обычно время между notify_one() и пробуждением варьируется от 10 (редких) до 100 микросекунд, причем большинство значений составляет 50 микросекунд. Тем не менее, около 1 в 1000 идет более одной миллисекунды, причем некоторые из них занимают более 5 миллисекунд.
Мне просто интересно, являются ли эти типичные значения? Есть ли более быстрый способ сигнализации, не требующий вращения? Отсюда все зависит от приоритетов потоков? Я не начал играть с приоритетами, но мне было просто интересно, есть ли вероятность получить это в довольно устойчивой области около 10 микросекунд?
Спасибо
РЕДАКТИРОВАТЬ: С помощью SetPriorityClass (GetCurrentProcess(), REALTIME_PRIORITY_CLASS) среднее время пробуждения по-прежнему составляет примерно 50 микросекунд, однако есть намного меньше выбросов, большинство из которых теперь составляют около 150-200 микронов. За исключением одного уродского выброса в 7 мс. Хммм... не хорошо.