Maison > Questions et réponses > le corps du texte
Comment js peut-il obtenir un effet multithread ?
过去多啦不再A梦2017-05-19 10:28:22
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.
黄舟2017-05-19 10:28:22
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.
黄舟2017-05-19 10:28:22
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.
漂亮男人2017-05-19 10:28:22
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