и это полезно алгоритм дерева властелина Lengauer-Тарьяна для анализа использования памяти.
Хорошо блокирующий ввод-вывод означает, что данный поток не может делать больше ничего, пока ввод-вывод не будет полностью получен (в случае сокетов это ожидание может быть долгим).
Неблокирующий ввод-вывод означает, что запрос ввода-вывода сразу ставится в очередь, и функция возвращается. Фактический ввод-вывод затем обрабатывается ядром на более позднем этапе.
Для блокировки ввода-вывода вам нужно либо согласиться с тем, что вы собираетесь ждать каждого запроса ввода-вывода, либо вам нужно будет запускать поток для каждого запроса (что будет очень сложно очень быстро).
Для неблокирующего ввода-вывода вы можете отправлять несколько запросов, но вы должны помнить, что данные не будут доступны до некоторого «более позднего» момента. Эта проверка фактического поступления данных, вероятно, является самой сложной частью.
В 99% приложений вам не нужно заботиться о блокировке ввода-вывода. Иногда, однако, вам нужна дополнительная производительность, позволяющая себе инициировать запрос ввода-вывода, а затем делать что-то еще, прежде чем вернуться и, надеюсь, обнаружить, что запрос ввода-вывода завершен.
В любом случае, только мой туппенс.
Править : Чтобы ответить, как разработать приложение для обработки блокирующего ввода-вывода при хорошей производительности, сопрограммы могут быть хорошими.
Положительные и отрицательные стороны довольно очевидны:
Блокировка - линейное программирование, проще кодировать, меньше контроля.
Неблокирование - параллельное программирование, сложнее кодировать, больше контроля.