Я читал nodejs в последнее время, пытаясь понять, как он обрабатывает несколько параллельных запросов. Я знаю, что nodejs - это однопоточная архитектура, основанная на циклах событий, в данный момент времени будет выполняться только один оператор, т.е. На основной поток и блокирующий код/Вызовы IO обрабатываются рабочими потоками (по умолчанию 4).
Теперь мой вопрос заключается в том, что происходит, когда веб-сервер, построенный с использованием nodejs, получает несколько запросов, я знаю, существует множество потоков, которые имеют похожие вопросы, но не нашли конкретного ответа на этот вопрос.
Поэтому я приводил пример здесь, допустим, у нас есть код внутри маршрута, например /index.
app.use('/index', function(req, res, next) { console.log("hello index routes was invoked"); readImage("path", function(err, content) { status = "Success"; if(err) { console.log("err :", err); status = "Error" } else { console.log("Image read"); } return res.send({ status: status }); }); var a = 4, b = 5; console.log("sum =", a + b); });
Предположим, что readImage() занимает около 1 минуты, чтобы прочитать это изображение. Если два запроса T1 и T2 совпадают, как nodejs будет обрабатывать эти запросы?
Будет ли он принимать первый запрос T1, обрабатывать его во время очереди запроса T2 (пожалуйста, поправьте меня, если мое понимание здесь не так), если какой-либо асинхронный/блокирующий материал встречается как readImage, он затем отправляет его в рабочий поток (через какой-то момент когда асинхронный материал делается, он уведомляет основной поток, и основной поток начинает выполнение обратного вызова), продвигайтесь вперед, выполняя следующую строку кода. Когда это делается с T1, тогда выбирает запрос T2? Правильно ли это? или он может обрабатывать код T2 между ними (что означает, что при вызове readImage он может начать обработку T2)?
Я был бы очень признателен, если кто-нибудь может помочь мне найти ответ на этот вопрос