Comme nous le savons tous, le code JavaScript ne peut être exécuté que sur un seul thread, c'est-à-dire qu'un seul thread a une caractéristique : il ne peut être exécuté que de manière séquentielle s'il existe une logique d'opération fastidieuse. dans le code, il est probable que cela provoquera le blocage du navigateur.
Alors pourquoi JavaScript est-il conçu comme un modèle monothread ?
Les concepteurs de Javascript pensent que si javascript est conçu pour être multi-thread, cela augmentera considérablement la complexité du programme. Par exemple : s'il y a deux threads, un thread est responsable de la création. un bouton bouton, et l'autre thread Supprimez ce bouton En raison de l'incertitude de l'ordre d'exécution multi-thread, ce bouton peut apparaître ou non sur la page, ce qui causera de gros problèmes aux développeurs. Par conséquent, par souci de simplicité, JavaScript a été conçu dès le début comme un modèle à thread unique, ce qui constitue la fonctionnalité principale de JavaScript.
Afin de résoudre la limitation du javascript à un seul thread, les tâches du programme javascript sont divisées en : tâches synchrones et tâches asynchrones
Tâches synchrones : fait référence aux tâches qui sont en file d'attente pour exécution et qui ne sont pas suspendues par le moteur JavaScript sur le thread principal. La tâche suivante ne démarrera l'exécution qu'une fois la tâche précédente terminée.
Tâches asynchrones : fait référence à certaines tâches fastidieuses (telles que les requêtes IO) qui sont placées dans la file d'attente des tâches par le moteur JavaScript. Parce que ces tâches ne sont pas sur le thread principal, ces tâches ne seront pas exécutées tant qu'elles ne seront pas planifiées sur le thread principal (comme une fonction de rappel en ajax).
Alors, d'où vient la file d'attente des tâches ?
En fait, lorsque JavaScript est exécuté, en plus du thread principal, le moteur JavaScript créera également des files d'attente de tâches, qui contiennent certaines tâches asynchrones que le programme actuel doit traiter, telles que les tâches asynchrones. fonctions de rappel d'ajax Fonctions dans setTimeout et ainsi de suite. Lorsque toutes les tâches du thread principal sont exécutées, le moteur vérifie dans chaque file d'attente de tâches s'il existe des tâches qui répondent aux conditions d'exécution. Si tel est le cas, elles seront planifiées sur le thread principal pour exécution.
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!