Неблокирующие файловые дескрипторы Unix Network Programming - PullRequest
1 голос
/ 14 ноября 2009

Я хочу спросить, в каких случаях нам нужно использовать флаг неблокирования в дескрипторах файлов / сокетов, вместо этого мы всегда можем использовать вызов функции select для определения готового дескриптора. Это ссылка на программу в разделе 16.2 Сетевого программирования Unix V1. В этой программе почему автор устанавливает неблокирующий флаг на 3 дескриптора stdin, stdout, socket. Он также говорит, что EWOULDBLOCK никогда не происходит. Но он также говорит, что время уменьшается с 12,3 до 6,9 секунды.

1 Ответ

1 голос
/ 14 ноября 2009

Файлы:

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

Этот QR-код также нужны для различных QRNG (квантовых генераторов случайных чисел), а также для различных типов контроллеров освещения, которые должны искать равноправные узлы, прежде чем подать сигнал «готов!».

Кроме того, поскольку некоторые файловые системы пространства пользователя предоставляют интерфейс ioctl (), который известен для блокировки на несколько секунд. В этом случае вы можете или не хотите передавать неблокирующую FD , в зависимости от того, насколько вредным может быть сон для выбранного вами времени.

Цоколь:

Когда вы хотите использовать неблокирующий ввод / вывод, в то время как однопоточный «дворецкий» имеет тенденцию ко многим гостям. Распространенным заблуждением здесь является то, что без блокировок означает без блокировок некоторыми мистическими средствами. Это не так. На самом деле, один из них обычно исключает другого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...