2016-02-11 2 views
3

Я объясню свой вопрос на примере.NodeJS: Кто выполняет асинхронную работу при вызове асинхронной функции?

fs.readFile('somefilename', function(err, data) { 
    ...doSomething... 
}); 

Когда эта строка кода выполняется readFile начнет чтение файла. При успехе или неудаче этот обратный вызов будет переведен в очередь для выполнения с соответствующими аргументами.

Чтение файла происходит asynchronously, но кто это делает, если NodeJS однопоточный, неблокирующий?

+1

Асинхронное программирование не обязательно означает многопоточность. – Derek

+1

Я думаю, что среда (в данном случае node.js) может быть многопоточной. Это только javascript-код, который является однопоточным. – MinusFour

+0

@OliverQueen Хорошо. Мой вопрос: как читать файл и одновременно читать файл, а также запускать следующий код. –

ответ

4

Код пользователя выполнен в одном потоке. Однако за кулисами nodejs использует libuv/libio для обработки любого io, который использует потоки.

https://github.com/libuv/libuv

Интересные сообщения:
How the single threaded non blocking IO model works in Node.js
Does node.js use threads/thread pool internally?
Why is Node.js single threaded?

0

Я бы объяснить вам это сам, но это video бы сделать гораздо лучшую работу, объясняющую цикл событий JavaScript.

0

Node.js - это сервер, управляемый событиями. Это не значит, что он использует многопоточность.

Будучи управляемым событиями, Node.js может обрабатывать несколько запросов одновременно. В основном, когда он получает запрос, Node.js запускает его выполнение. Во время выполнения Node.js получает другой запрос, он запустит его выполнение. И так далее. Когда первый запрос завершен и результат доступен, он вызывает событие, уведомляющее Node.js, что этот запрос завершен, затем Node.js отправляет результат запроса.

Дополнительную информацию можно найти на Node.js website и еще больше информации here.

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