Скажите мне сейчас: асинхронное программирование не обязательно означает многопоточность.
Javascript - это однопоточная среда выполнения - вы просто не можете создавать новые потоки вJS, потому что язык / среда выполнения не поддерживают его.
Фрэнк говорит это правильно (хотя и тупо).Таким образом, «обработать этот HTTP-запрос» будет добавлено в очередь событий, а затем обработано в цикле событий при необходимости.
Когда вы вызываете асинхронную операцию (например, запрос mysql db), node.jsотправляет «эй, выполнить этот запрос» в MySQL.Так как этот запрос займет некоторое время (миллисекунды), node.js выполняет запрос, используя асинхронную библиотеку MySQL - возвращаясь к циклу событий и делая что-то еще , ожидая, когда mysql вернется к нам.Подобно обработке этого HTTP-запроса.
Редактировать : В отличие от этого, node.js может просто ждать (ничего не делая), чтобы mysql вернулся к нему.Это называется синхронным звонком.Представьте себе ресторан, в котором ваш официант подает ваш заказ повару, затем садится и вертит пальцами, пока повар готовит.В ресторане, как и в программе node.js, такое поведение глупо - у вас есть другие клиенты, которые голодны и нуждаются в обслуживании.Таким образом, вы хотите быть максимально асинхронным, чтобы убедиться, что один официант (или процесс node.js) обслуживает как можно больше людей.
Редактирование выполнено
Node.js связывается с mysql с использованием библиотек C, поэтому технически эти библиотеки C могут порождать потоки, но внутри Javascript вы ничего не можете сделать с потоками.