Блокирование IO по сравнению с неблокированием IO; поиск хороших [закрытых] статей

память Eclipse Анализатор :

и это полезно алгоритм дерева властелина Lengauer-Тарьяна для анализа использования памяти.

47
задан Piotr Dobrogost 6 August 2009 в 21:02
поделиться

2 ответа

Хорошо блокирующий ввод-вывод означает, что данный поток не может делать больше ничего, пока ввод-вывод не будет полностью получен (в случае сокетов это ожидание может быть долгим).

Неблокирующий ввод-вывод означает, что запрос ввода-вывода сразу ставится в очередь, и функция возвращается. Фактический ввод-вывод затем обрабатывается ядром на более позднем этапе.

Для блокировки ввода-вывода вам нужно либо согласиться с тем, что вы собираетесь ждать каждого запроса ввода-вывода, либо вам нужно будет запускать поток для каждого запроса (что будет очень сложно очень быстро).

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

В 99% приложений вам не нужно заботиться о блокировке ввода-вывода. Иногда, однако, вам нужна дополнительная производительность, позволяющая себе инициировать запрос ввода-вывода, а затем делать что-то еще, прежде чем вернуться и, надеюсь, обнаружить, что запрос ввода-вывода завершен.

В любом случае, только мой туппенс.

Править : Чтобы ответить, как разработать приложение для обработки блокирующего ввода-вывода при хорошей производительности, сопрограммы могут быть хорошими.

62
ответ дан 26 November 2019 в 19:41
поделиться

Положительные и отрицательные стороны довольно очевидны:

Блокировка - линейное программирование, проще кодировать, меньше контроля.
Неблокирование - параллельное программирование, сложнее кодировать, больше контроля.

23
ответ дан 26 November 2019 в 19:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: