Dites-le avec moi maintenant: programmation asynchrone ne signifie pas nécessairement multi-thread.
Javascript est un seul thread d'exécution - vous ne sont tout simplement pas en mesure de créer de nouveaux threads en JS parce que la langue/runtime ne le supporte pas.
Frank, dit-il correctement (même si obscure) En anglais: il y a une boucle principale qui gère quand les choses viennent dans votre application. Ainsi, la "poignée de cette requête HTTP" sera ajouté à la boucle d'événements, puis traitées le cas échéant.
Lorsque vous appelez une opération asynchrone (une db mysql requête, par exemple), node.js envoie "hey, exécuter cette requête" de mysql. Depuis cette requête va prendre un certain temps (millisecondes), node.js effectue la requête à l'aide de la base de données MySQL async bibliothèque - pour en revenir à la boucle d'événements et de faire autre chose pendant que d'attente pour mysql de revenir à nous. Comme la manipulation que de la requête HTTP.
Edit: Par contre, node.js pourrait simplement attendre (ne rien faire) pour mysql, pour revenir à elle. Cela s'appelle un appel synchrone. Imaginez un restaurant, où votre serveur envoie votre commande à la faire cuire, puis s'assoit et twiddles ses pouces tandis que le chef cuisine. Dans un restaurant, comme dans un node.js au programme, un tel comportement est stupide - vous avez d'autres clients qui ont faim et ont besoin d'être servi. Ainsi vous voulez être comme asynchrones que possible pour s'assurer un garçon (ou node.js processus) est de servir comme beaucoup de gens qu'ils le peuvent.
Edit fait
Node.js communique avec mysql à l'aide de bibliothèques C, donc techniquement, les bibliothèques pourraient frayer hors threads, mais à l'intérieur de Javascript, vous ne pouvez pas faire n'importe quoi avec les threads.