1. Dessinez une image à la main pour illustrer.
2. Pourquoi JavaScript est monothread (voici une citation du professeur Ruan Yifeng)
Le fil de discussion unique de JavaScript est lié à son objectif.
En tant que langage de script de navigateur, l'objectif principal de JavaScript est d'interagir avec les utilisateurs et de manipuler le DOM.
Cela détermine qu'il ne peut être qu'un seul thread, sinon cela entraînera des problèmes de synchronisation très complexes.
Par exemple, supposons que JavaScript ait deux threads en même temps. Un thread ajoute du contenu à un certain nœud DOM et l'autre thread supprime le nœud. Dans ce cas, quel thread le navigateur doit-il utiliser ?
Ainsi, afin d'éviter toute complexité, JavaScript est monothread depuis sa naissance. Cela est devenu la fonctionnalité principale de ce langage et ne changera pas à l'avenir.
Afin de profiter de la puissance de calcul des CPU multicœurs, HTML5 propose le standard Web Worker, qui permet aux scripts JavaScript de créer plusieurs threads, mais les threads enfants sont entièrement contrôlés par le thread principal et ne doivent pas faire fonctionner le DOMAINE.
Ainsi, cette nouvelle norme ne change pas la nature monothread de JavaScript.
3. Où est l'implémentation asynchrone de JavaScript
Comme le montre l'image du début, je pense personnellement que le thread principal de gauche est synchrone et que la file d'attente des événements (file d'attente des messages) de gauche est asynchrone.
Bien sûr, il existe de nombreux asyncs en JavaScript :
Ajax(XMLHttpRequest) Image Tag,Script Tag,iframe(原理类似) setTimeout/setInterval CSS3 Transition/Animation postMessage Web Workers Web Sockets and more…