Скажите мне сейчас: асинхронное программирование не обязательно означает многопоточность.
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
также [Как однопоточен не блокирует модель IO работает в Node.js] (http://stackoverflow.com/questions/14795145/how-the- single-threaded-not-blocking-io-model-works-in-node-js) –