Рабочий поток должен спать?

Обычный рабочий поток выполняется в цикле, в котором он проверяет наличие доступных задач в очереди и использует их. Мне показалось несколько примеров, когда поток ждет пару миллисекунд, когда нет доступной задачи, используя std::this_thread::sleep_for() например. Однако я хочу, чтобы мой поток выполнял задачи с минимальной задержкой, поэтому я не использую режим сна. Это плохо? Должен ли рабочий поток спать несколько миллисекунд при проверке задач?

1

Решение

Если вы «накатываете» свою очередь или систему сообщений, то один из способов избежать потребления 100% процессорного времени — это немного «заснуть», когда нет доступной работы. Тем не менее, наличие какого-либо другого механизма, позволяющего ОС позаботиться об этом за вас (семафор (ы), очередь на основе ОС, такая как конвейер или система почтовых ящиков, или даже использование механизма передачи сетевых сообщений и т. Д.), Было бы намного лучше, поскольку это упрощает ваше приложение и позволяет ОС позаботиться об обработке сна / бодрствования.

Конечно, все зависит от того, чего вы на самом деле пытаетесь достичь, и каковы ожидаемые результаты — если ваш код предназначен для запуска, скажем, на мобильном телефоне, критически важно не тратить циклы ЦП, поскольку это также убивает время автономной работы. тратить циклы процессора, которые могут быть использованы для какой-то другой задачи. С другой стороны, если ваша система обмена сообщениями находится в тормозах ABS автомобиля, и вам требуется измерять время импульсов от датчика с точностью до микросекунды, спящий режим будет плохой идеей, поскольку ваш код, вероятно, будет спать намного дольше, чем один раз импульс от датчика ABS.

Если он находится на рабочем столе, никто не будет беспокоиться, если ваше приложение не будет спать, если оно будет работать в течение нескольких секунд или даже минуты или более. Но если он продолжает использовать 1 ядро ​​при 100% в течение нескольких часов (а ваше приложение не производит что-то такое же ценное, как потраченные впустую циклы — очевидно, что вычисление следующего по величине простого числа в мире или сворачивание белков стоит потратить впустую циклы на Экономия 0,5 миллисекунды при получении пакета из интернета, вероятно, нет).

Только вы (и любые другие люди, вовлеченные в проект, конечно) будут знать, каковы критерии дизайна для вашего проекта. Это не то, о чем вы можете «спросить интернет». Выше следует дать вам некоторые рекомендации, как только вы выясните, каковы ваши критерии дизайна.

5

Другие решения


По вопросам рекламы [email protected]