Как Node.js является асинхронным и однопоточным одновременно? - PullRequest
0 голосов
/ 18 сентября 2018

Заголовок вопроса в основном говорит сам за себя, но перефразируя его:
Что обрабатывает выполнение асинхронной функции, если основной (и единственный) поток занят обработкой основного блока кода?

До сих пор я только обнаружил, что асинхронный код выполняется в другом месте или вне основного потока, но что это конкретно означает?

РЕДАКТИРОВАТЬ: Предлагаемый Node.js Цикл событий Ответы на вопрос также могут затрагивать эту тему, но я искал менее сложный, более конкретный ответ, а не объяснение концепции Node.js.Кроме того, оно не отображается при поиске чего-либо, похожего на «узел асинхронный однопоточный».

EDIT, @Mr_Thorynque: Выполнение запроса для получения данных из базы данных и записи их в консоль.Ничего не регистрируется, потому что Node, будучи асинхронным, не ожидает завершения запроса и заполнения data .(это просто пример по запросу, а не часть моего вопроса)

var = data;
mysql.query(`SELECT *some rows from database*`, function (err, rows, fields) {
        rows.forEach(function(row){
        data += *gather the requested data*
    });
});
console.log(data);  

1 Ответ

0 голосов
/ 18 сентября 2018

Что действительно сводится к тому, что процесс узла (который является однопоточным) передает работу «чему-то другому». Это может быть процесс ввода-вывода операционной системы, сетевой ресурс или что-то еще. Передавая его, он освобождает поток, чтобы продолжить работу над следующей вещью в памяти. Он использует файловые дескрипторы для отслеживания любой ожидающей работы и в цикле обработки событий объединяет их вместе и запускает обратный вызов, когда работа завершена.

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

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

...