Я не программист Node, но меня интересует, как работает однопоточная неблокирующая модель ввода-вывода. После того, как я прочитал статью understanding-the-node-js-event-loop, я действительно смущен. Он привел пример модели:
c.query(
'SELECT SLEEP(20);',
function (err, results, fields) {
if (err) {
throw err;
}
res.writeHead(200, {'Content-Type': 'text/html'});
res.end('<html><head><title>Hello</title></head><body><h1>Return from async DB query</h1></body></html>');
c.end();
}
);
Вот вопрос. Когда есть два запроса A (на первом месте) и B, поскольку существует только один поток, программа на стороне сервера будет обрабатывать запрос A во-первых: выполнение sql-запроса, которое является оператором сна, стоящим для ожидания ввода-вывода. И программа застревает в ожидании ввода-вывода и не может выполнить код, который отображает веб-страницу. Будет ли программа переключаться на запрос B во время ожидания? На мой взгляд, из-за модели с одним потоком нет возможности переключить один запрос от другого. Но заголовок кода примера говорит, что "все работает параллельно, кроме вашего кода". (P.S Я не уверен, если я неправильно понял код или нет, так как я никогда не использовал Node.) Как Node переключить A в B во время ожидания? И вы можете просто объяснить однопоточную неблокирующую модель ввода-вывода Node? Буду признателен, если вы поможете мне.:)