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