В каких условиях используется блокирующий сетевой ввод / вывод? - PullRequest
1 голос
/ 20 февраля 2012

Я прочитал некоторые lib как libev, все они используют неблокирующий io для управления сетевым взаимодействием. Тем не менее, в каком случае блокировка ввода-вывода используется в сети?

1 Ответ

1 голос
/ 20 февраля 2012

Для простых программ (например, тестовая утилита или выделенный клиент) или когда используются выделенные потоки.

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

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

...