Нужно ли опрашивать неблокирующие сокеты для лучшей производительности? - PullRequest
0 голосов
/ 29 октября 2011

У меня есть список неблокирующих сокетов.

Я мог бы вызвать recv в каждом (в этом случае некоторые вызовы не будут выполнены) или poll список, а затем вызвать recv по готовностисокеты.

Есть ли разница в производительности между этими подходами?

Спасибо!

1 Ответ

1 голос
/ 29 октября 2011

Если скорость передачи данных в сокетах не достаточно высока (например, recv() не будет работать <25% времени), использование <code>poll() или select() почти всегда является лучшим выбором.

Современная операционная система будет интеллектуально блокировать операцию poll() до тех пор, пока один из fds в наборе не будет готов (ядро будет блокировать поток на наборе fds, пробуждая его только тогда, когда к этому файлу обращаются ... в конечном счете, это происходит намного больше, чем необходимо, что приводит к некоторому ожиданию занятости, но это лучше, чем ничего), в то время как цикл recv() всегда приводит к ожиданию занятости.

...