2013-08-20 2 views
6

От here я обнаружил, что node.js реализует неблокирующую модель ввода-вывода. Но я не понимаю, как это сделать.Как node.js реализует неблокирующий ввод-вывод?

Поскольку javascript однопоточный. Как один поток может выполнять операции ввода-вывода и одновременно выполнять дальнейший процесс.

ответ

9

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

Node.js использует для этого цикл событий. Цикл событий - это объект, который обрабатывает и обрабатывает внешние события и преобразует их в вызовы обратного вызова.

Когда данные необходимы, nodejs регистрирует обратный вызов и отправляет операцию в этот цикл событий. Всякий раз, когда данные доступны, вызывается обратный вызов.

http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/ для получения дополнительной информации

+2

Скопируйте эту ссылку. Это хорошая статья, которая должна объяснить, что вам нужно знать. – Andy

7

I/O, который обрабатывается node.js, является многопоточным внутри.

Это программный интерфейс, который является однопоточным и асинхронным.

+0

Очень элегантный ответ, спасибо. – carousel

0

Ryan Dahl: Original Node.js presentation at JSConf 2009 (Ryan является создателем Node.js)

Это видео ответ на ваш вопрос.

Суть JavaScript (v8) - это обратные вызовы событий (кнопка onclick = "functions()" и т. Д.). Это то, как ввод-вывод многопоточен. Нам по-прежнему приходится писать наш код, чтобы не блокировать ввод-вывод, только записывая обратные вызовы; иначе код будет ждать откликов db.query и блокироваться перед выполнением следующей строки кода.

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