Я прочитал некоторую lib как libev, все из них используют неблокирующий io для обработки сетевого общения. Однако в этом случае блокировка io используется в сетях?В каком состоянии используется блокирующий сетевой ввод-вывод?
ответ
Для простых программ (например, утилита тестирования или выделенный клиент) или при использовании выделенных потоков.
В первом случае нет необходимости в дополнительной логике, связанной с неблокирующими вводами-выводами, тогда как во втором случае логика заменяется логикой, включающей несколько потоков, где поток с использованием блокирующего ввода-вывода существенно имитируется выделенный клиент (или сервер), это делается за счет дополнительных ресурсов для потоков и синхронизации, но часто оправдано, особенно когда в любом случае необходимы несколько потоков или где потоки дешевы с точки зрения ресурсов.
Неблокирующий ввод-вывод часто используется в библиотеках и в других случаях, когда использование выделенных потоков не может быть оправдано, поскольку это касается ресурсов, возможностей тестирования или переносимости. Он часто сводится к индивидуальному вкусу. Разница часто является вопросом стиля.