2013-11-01 3 views
0

Я новичок на платформе Nodejs. Я понял, что узел использует один поток для обработки. В случае веб-сервера, как один поток может обрабатывать запрос от нескольких пользователей.Nodejs single threaded and webserver

Я хотел бы знать, как NodeJS обрабатывает параллельный запрос от клиента.

+1

также [Как однопоточен не блокирует модель IO работает в Node.js] (http://stackoverflow.com/questions/14795145/how-the- single-threaded-not-blocking-io-model-works-in-node-js) –

ответ

0

Скажите мне сейчас: асинхронное программирование не обязательно означает многопоточность.

Javascript - это однопоточная среда выполнения - вы просто не можете создавать новые потоки в JS, потому что язык/среда выполнения не поддерживает его.

Фрэнк говорит об этом правильно (хотя и тупо). На английском языке: есть основной цикл событий, который обрабатывает, когда что-то входит в ваше приложение. Таким образом, «обработать этот HTTP-запрос» будет добавлен в цикл событий, а затем обработать, когда это необходимо.

Когда вы вызываете операцию async (например, запрос mysql db), node.js отправляет «hey, execute this query» в mysql. Поскольку этот запрос займет некоторое время (миллисекунды), node.js выполняет запрос с использованием библиотеки async MySQL - возвращаясь к циклу событий и выполняя что-то еще там, ожидая, когда mysql вернется к нам. Подобно обработке этого HTTP-запроса.

Редактировать: Наоборот, node.js может просто ждать (ничего не делать) для mysql, чтобы вернуться к нему. Это называется синхронным вызовом. Представьте себе ресторан, где ваш официант подает ваш заказ повару, затем садится и сжимает большие пальцы, пока шеф-повар готовит. В ресторане, как в программе node.js, такое поведение глупо - у вас есть другие клиенты, которые голодны и нуждаются в обслуживании. Таким образом, вы хотите быть максимально асинхронным, чтобы убедиться, что один официант (или процесс node.js) обслуживает как можно больше людей.

Редактировать сделать

Node.js связывается с MySQL с использованием библиотек C, так что технически эти библиотеки C может икру от темы, но внутри Javascript вы не можете ничего с потоками делать.

источник How does Asynchronous programming work in a single threaded programming model?

благодаря RyanWilcox

+0

Я понял, что узел обрабатывает асинхронный ввод-вывод, и это совершенно разумно. Но мне нравится знать, как node.js обрабатывает параллельный запрос. – satish

+0

[Совершенно можно запускать код в отдельном потоке в JavaScript.] (Https://github.com/xk/node-threads-a-gogo) – josh3736

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