Сообщение от Ruslan
|
если можно детальней на счет потоков, оч. интересно
|
В "обычной" реализации (полагаю, имеется в виду Апач) при поступлении запроса порождается тред (поток), который этот запрос обрабатывает. ОС быстро-быстро переключается между этими потоками (ну и распределяет их между ядрами процессора), поэтому запросы обрабатываются более-менее одновременно.
А вот в Node всё происходит немного по другому. Там для обработки множества запросов используется всего один тред и Event Loop. В Node есть пул событий, ждущих обработки. Это входящие соединения, ответы от серверов, прочитанные с диска фрагменты файлов и т.п. Обработчики этих событий выполняются по очереди одним потоком сервера (одним контекстом движка V8). При этом не тратится время на переключение туда-сюда между кучей тредов.
Один из главных принципов Node — обработчики должны возвращать управление как можно скорее. Если обработчик события должен например прочитать файл, он не сидит и не ждёт пока с жёсткого диска приедут нужные ему байты (как делал бы тред в PHP). Он начинает чтение файла и оставляет обработчик, который будет иметь дело с данными - и сразу же возвращает управление в event loop.