Le principe de l'exécution js monothread des tâches asynchrones

Bonjour à tous ceux qui apprennent le front-end~

Tout le monde sait que JavaScript est l'un des langages de script des navigateurs et que sa plus grande fonctionnalité est le monothread. Avez-vous déjà pensé que puisque JavaScript est monothread, mais peut également effectuer des opérations asynchrones en même temps, les deux sont pas complètement à l'opposé ? Aujourd'hui, Xiao Zhang vous emmènera le découvrir ~~

JS est monothread, cette phrase est vraie. Mais pour être plus précis, JS n'a qu'un seul thread principal, mais en fait il a d'autres threads.Bien sûr, toutes les tâches de fonction ne peuvent être exécutées que sur le thread principal.

JS est le langage de script du navigateur, il doit donc être monothread au moment de la conception. Quant à savoir pourquoi il doit être conçu comme un langage monothread, les amis qui ne comprennent pas peuvent lire mon blog précédent

En fait, en tant que script de navigateur, la fonction la plus fondamentale de JS est de réaliser l'interaction entre l'utilisateur et le navigateur. Lorsqu'un utilisateur souhaite supprimer un A et ajouter du contenu à A en même temps, que faire s'il est multithread ? à gérer ? Il n'y a aucun moyen de le gérer. S'il s'agit d'un seul thread, c'est très simple. L'utilisateur effectue cette opération en premier, et notre thread principal effectuera celui-là, et il n'y aura pas de conflits.

JS est donc évidemment monothread, mais il peut également effectuer des opérations asynchrones en même temps. Ensuite, dites-nous les points clés !

Tout d'abord, nous devons clarifier un concept, à savoir la file d'attente des tâches . Un seul thread ne peut exécuter la tâche suivante qu'une fois la tâche précédente terminée, nous serons donc confrontés à un problème. Par exemple, lorsque nous utilisons Ajax pour lire données réseau, cela prendra beaucoup de temps, mais je dois attendre les résultats avant de continuer. Par conséquent, les concepteurs du langage JS ont réalisé qu'à ce stade, le thread principal peut ignorer complètement les périphériques IO (périphériques d'entrée et de sortie, tels qu'Ajax, etc.), suspendre les tâches en attente et exécuter les tâches mises en file d'attente en premier. . Attendez que le périphérique IO renvoie le résultat, puis revenez en arrière et poursuivez l'exécution de la tâche suspendue.

Par conséquent, les tâches sont divisées en deux types, l’une est une tâche synchrone et l’autre est une tâche asynchrone.

1. Tâche synchrone : ce n'est qu'une fois l'exécution de la tâche précédente terminée que la tâche suivante peut être exécutée dans le thread principal

2. Tâches asynchrones : Toutes les tâches de cette file d'attente n'entrent pas dans le thread principal pour être exécutées, mais sont exécutées par le thread fourni par le navigateur . Une fois l'exécution terminée, une fonction de rappel sera générée et le thread principal sera informé. Après avoir exécuté la tâche, il appellera la fonction de rappel qui s'est notifiée au plus tôt, afin qu'elle entre dans le thread principal pour exécution, comme une requête ajax, et le résultat de la requête sera présenté dans le thread principal.

synergie entre synchrone et asynchrone

(1) Toutes les tâches de synchronisation sont exécutées sur le thread principal, formant une pile de contexte d'exécution.
(2) En plus du thread principal, il existe également une "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. (rappel de fonction de rappel).
(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 » pour voir quels événements s'y trouvent. Les tâches asynchrones correspondantes mettent fin à l'état d'attente, entrent dans la pile d'exécution et commencent à s'exécuter. (parcourez cette étape)

La "fonction de rappel" (callback) est le code qui sera bloqué par le thread principal. La tâche asynchrone doit spécifier une fonction de rappel.Lorsque le thread principal commence à exécuter la tâche asynchrone,la fonction de rappel correspondante est exécutée.

Il s'avère que c'est ce qu'on dit souvent : le monothread et l'asynchrone doivent dépendre du navigateur !

Ce qui précède est mon résumé des raisons pour lesquelles JS est monothread et peut effectuer des opérations asynchrones en même temps. Si d'autres amis ont des questions, veuillez laisser un message dans la zone de commentaire pour en discuter, merci ~~

おすすめ

転載: blog.csdn.net/Star_ZXT/article/details/129507891