2009-09-26 3 views

ответ

9

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

+7

... и это уведомляются через обратный вызов, когда операция ввода-вывода завершена. Это заставляет вас разрабатывать свои программы по-разному, но сделает их намного лучше. –

+0

@ Лекс, любой пример блокировки и неблокирующей операции? Благодарю. – Kalanidhi

+1

@etc_passwd В JS это просто понять; вызов 'alert();' блокируется, поскольку выполнение приостанавливается до тех пор, пока пользователь не нажмет OK. Вызов AJAX не блокируется, выполнение продолжается, пока отправляется HTTP-запрос. –

0

просто сказал .. не блокирование ввода/вывода (Asynchronous) позволяет другие операции, которые будут проводиться в то время как он делает свое дело и блокирование ввода/вывода будет блокировать другие операции

4

Это вопрос параллелизм. В нормальном случае после того, как ядро ​​ОС получает операцию ввода-вывода из пользовательской программы, эта программа не запускается снова до завершения операции ввода-вывода. В то же время другие программы обычно планируются.

Это решает множество проблем. Например, как программа знает, сколько байтов было прочитано, пока не завершится ввод-вывод, когда возвращается read(2)? Как он знает, может ли он повторно использовать буфер write(2), если операция все еще выполняется, когда возвращается write(2)? Очевидно, что для истинного асинхронного ввода-вывода необходим более сложный интерфейс.

В конечном счете все сводится к:

  1. I/O происходит синхронно по отношению к программе, путем блокирования программы до ввода/вывод не будет завершен
  2. ввод/вывод просто запланирован системным вызовом , и существует некоторый механизм уведомления для передачи реального результата.
  3. Существует компромисс, когда операции ввода-вывода просто сбой, если они не могут быть выполнены немедленно. Это более распространенное использование «неблокирующих» операций ввода-вывода на практике.

Вся проблема осложняется к тому же усилием, чтобы запланировать многопоточные программы, когда I/O, вероятно, может блокировать только одну нить, но это другой вопрос ...

Смежные вопросы