Parlons d'abord du principe d'exécution de JS : lorsque le moteur js exécute du code js, il est monothread, c'est-à-dire qu'un seul processus exécutera le code JS en même temps, et les fonctions de rappel sont également exécutées une par un (dans l'ordre des événements, pas dans l'ordre du code). La communication et la synchronisation asynchrones dans JS sont implémentées par un autre thread, indépendant du contexte du thread js. Prenons l'exemple de l'opération de synchronisation JS. Lorsque le moteur JS exécute l'opération setTimeout(callbackFunction, 100), il informera le thread de synchronisation que j'ai besoin de 100 millisecondes de synchronisation, puis le moteur JS entrera dans la boucle d'événements. Après 100 millisecondes, le moteur de synchronisation ajoute un événement ayant expiré à la file d'attente des événements. Le moteur JS lit l'événement de délai d'attente dans la file d'attente et exécute la fonction callbackFunction. Si plusieurs événements sont ajoutés à la file d'attente des événements en même temps, le moteur JS n'exécutera les rappels qu'un par un. Il en va de même pour l'asynchrone. Le code JS lance une demande de communication, le thread de communication effectue l'opération de communication et ajoute l'événement d'achèvement à la file d'attente des événements une fois l'opération terminée. Le moteur JS extrait l'événement de la file d'attente et appelle un rappel pour traiter le résultat de la communication. Lorsque le moteur JS exécute la fonction de rappel, il ne peut pas répondre à d'autres événements en même temps.
Le travailleur Web de JS peut effectuer certaines opérations à grande échelle sur le thread d'arrière-plan sans bloquer le thread principal ; il communique avec onmessage et le thread principal via postmessage ; mais il a des restrictions et ne peut pas faire fonctionner le DOM et certaines API pour lesquelles vous pouvez lire la documentation ; détails.
Javascript est threadé. Si vous souhaitez obtenir des effets multithreads, vous pouvez envisager node.js pour atteindre l'objectif via des événements de nœud.
S'il est utilisé dans un navigateur, il existe désormais un service worker qui peut exécuter des js en arrière-plan, ce qui revient à ouvrir un fil de discussion supplémentaire. Je n'y connais pas grand chose, mais vous pouvez le découvrir si vous en avez besoin
Parlons d'abord du principe d'exécution de JS : lorsque le moteur js exécute du code js, il est monothread, c'est-à-dire qu'un seul processus exécutera le code JS en même temps, et les fonctions de rappel sont également exécutées une par un (dans l'ordre des événements, pas dans l'ordre du code). La communication et la synchronisation asynchrones dans JS sont implémentées par un autre thread, indépendant du contexte du thread js. Prenons l'exemple de l'opération de synchronisation JS. Lorsque le moteur JS exécute l'opération setTimeout(callbackFunction, 100), il informera le thread de synchronisation que j'ai besoin de 100 millisecondes de synchronisation, puis le moteur JS entrera dans la boucle d'événements. Après 100 millisecondes, le moteur de synchronisation ajoute un événement ayant expiré à la file d'attente des événements. Le moteur JS lit l'événement de délai d'attente dans la file d'attente et exécute la fonction callbackFunction. Si plusieurs événements sont ajoutés à la file d'attente des événements en même temps, le moteur JS n'exécutera les rappels qu'un par un. Il en va de même pour l'asynchrone. Le code JS lance une demande de communication, le thread de communication effectue l'opération de communication et ajoute l'événement d'achèvement à la file d'attente des événements une fois l'opération terminée. Le moteur JS extrait l'événement de la file d'attente et appelle un rappel pour traiter le résultat de la communication. Lorsque le moteur JS exécute la fonction de rappel, il ne peut pas répondre à d'autres événements en même temps.
Le travailleur Web de JS peut effectuer certaines opérations à grande échelle sur le thread d'arrière-plan sans bloquer le thread principal ; il communique avec onmessage et le thread principal via postmessage ; mais il a des restrictions et ne peut pas faire fonctionner le DOM et certaines API pour lesquelles vous pouvez lire la documentation ; détails.
Javascript est monothread.
Javascript est threadé. Si vous souhaitez obtenir des effets multithreads, vous pouvez envisager node.js pour atteindre l'objectif via des événements de nœud.
S'il est utilisé dans un navigateur, il existe désormais un service worker qui peut exécuter des js en arrière-plan, ce qui revient à ouvrir un fil de discussion supplémentaire. Je n'y connais pas grand chose, mais vous pouvez le découvrir si vous en avez besoin