Сколько пакетов в секунду вы обрабатываете? Сколько времени занимает обработка этих пакетов? Если вы используете блокирующие потоки, какое среднее использование процессора вы получаете?
Если ожидание блокировки близко к 100% использованию, где может помочь снижение производительности на несколько битов от самой блокировки, вращение не улучшит, а скорее ухудшит производительность. Вращаясь, вы блокируете одно ядро, которое не будет доступно для запуска другого кода (возможно, включая код, который питает вас работой: то есть код ядра, который читает сеть и передает в ваше приложение пакеты), вы сжигаете ресурсы, не выполняя никакой работы. вообще ...
Обратите внимание, что когда в статье говорится, что писать код блокировки труднее, чем ожидает неблокирующее вращение, автор говорит не об операциях, для которых в системе реализована блокирующая версия, а о ситуациях, когда поток должен ждать при условии, вызванном другими потоками (значение общей переменной выходит за пределы лимита, флаг изменяется ...).
Кроме того, если стоимость проверки условия высока, тогда спиннинг повлечет за собой эту стоимость для каждой итерации цикла, и это может значительно превысить стоимость проверки один раз и выполнения дорогого * 1008. * подождите.
Помните, что вращение - это активное ожидание , не имеет смысла спрашивать, как активно ожидать , пока не потребляет процессор, поскольку подход активного ожидания подразумевает потребляет процессорное время. Что вы можете сделать, чтобы избежать ненужной загрузки ЦП? Используйте блокирующий вызов для получения следующего пакета. В конкретном случае чтения UDP-пакета я сомневаюсь, что два вызова неблокирующего чтения не дороже по времени обработки, чем один вызов блокирующего чтения.
Снова подумайте над вопросами в начале, которые можно подытожить следующим образом: Является ли блокирование узким местом? * Это сценарий, в котором активные ожидания могут действительно помочь? *