Maison > Article > interface Web > Introduction au mécanisme d'exécution asynchrone de JavaScript
----Le mécanisme d'exécution asynchrone est le suivant :
1. Les tâches de synchronisation gauche et droite sont exécutées sur le thread principal, formant une pile d'exécution
2. à la valeur du thread principal, il y a aussi la file d'attente des tâches, tant que la tâche asynchrone a un résultat en cours d'exécution, un événement est placé dans la file d'attente des tâches
3. Une fois que toutes les tâches synchrones de la pile d'exécution sont exécutées , le système lira la file d'attente des tâches et correspondant à la tâche à exécuter. La tâche est placée dans le thread principal et le thread principal se termine en attendant le statut , entre dans la pile d'exécution et commence à exécuter
(tant que le thread principal est vide, la file d'attente des tâches sera lue, c'est JavaScript mécanisme en cours d'exécution, ce processus est répété)
4. étapes sur le fil principal
----Pourquoi JavaScript est à thread unique :
1. JavaScript Vous ne pouvez faire qu'une seule chose à la fois. En tant que langage de script de navigateur, les opérations sont effectuées dans. plusieurs threads peuvent provoquer des conflits, donc JavaScript ne peut être qu'un seul thread
----HTML5 La norme stipule que la valeur minimale (intervalle le plus court) du deuxième paramètre de setTimeout() ne doit pas être inférieure à 4 millisecondes. Si elle est inférieure à cette valeur, elle augmentera automatiquement. Avant cela, les anciens navigateurs fixaient l'intervalle minimum à 10 millisecondes. De plus, ces modifications du DOM (en particulier celles impliquant un nouveau rendu de page) ne sont généralement pas exécutées immédiatement, mais toutes les 16 millisecondes. À l'heure actuelle, l'effet de l'utilisation de requestAnimationFrame() est meilleur que celui de setTimeout().
Il convient de noter que setTimeout() insère uniquement l'événement dans la "file d'attente des tâches". Le thread principal doit attendre que le code actuel (pile d'exécution) ait fini de s'exécuter avant que le thread principal exécute son fonction de rappel. Si le code actuel prend beaucoup de temps, cela peut prendre beaucoup de temps, il n'y a donc aucun moyen de garantir que la fonction de rappel sera exécutée à l'heure spécifiée par setTimeout().
---- La "file d'attente des tâches" est une file d'attente d'événements (peut également être comprise comme une file d'attente de messages). Lorsque le périphérique IO termine une tâche, il est ajouté à la "tâche". file d'attente" Un événement indiquant que les tâches asynchrones associées peuvent entrer dans la "pile d'exécution". Le thread principal lit la "file d'attente des tâches", ce qui signifie lire les événements qu'elle contient. Les événements de la « file d'attente des tâches », en plus des événements du périphérique IO, incluent également certains événements générés par l'utilisateur (tels que les clics de souris, le défilement de page, etc.). Tant que la fonction de rappel est spécifiée, ces événements entreront dans la « file d'attente des tâches » lorsqu'ils se produiront, en attendant que le thread principal les lise. La soi-disant "fonction de rappel" (callback) est le code qui sera suspendu par le thread principal. Les tâches asynchrones doivent spécifier une fonction de rappel. Lorsque le thread principal commence à exécuter une tâche asynchrone, la fonction de rappel correspondante est exécutée. La "file d'attente des tâches" est une structure de données premier entré, premier sorti. Les événements classés en premier sont lus en premier par le thread principal. Le processus de lecture du thread principal est fondamentalement automatique. Dès que la pile d'exécution est effacée, le premier événement de la « file d'attente des tâches » entrera automatiquement dans le thread principal. Cependant, en raison de la fonction "----Il est exécuté immédiatement lorsqu'il n'y a pas de code en JavaScript. Il est exécuté dès que possible lorsque le processus est inactif.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!