Maison  >  Article  >  interface Web  >  Le javascript est-il monothread ?

Le javascript est-il monothread ?

WBOY
WBOYoriginal
2022-03-10 10:04:212944parcourir

JavaScript est monothread. Même si JavaScript possède plusieurs cœurs, il ne peut exécuter des tâches que sur un seul thread appelé thread principal ; en tant que langage de script de navigateur, l'objectif principal de JavaScript est d'interagir avec les utilisateurs et de faire fonctionner le DOM. S'il n'est pas monothread, cela entraînera beaucoup de problèmes de synchronisation complexes.

Le javascript est-il monothread ?

L'environnement d'exploitation de ce tutoriel : système Windows 10, JavaScript version 1.8.5, ordinateur Dell G3.

Javascript est-il monothread ?

En tant que langage de script de navigateur, l'objectif principal de JavaScript est d'interagir avec les utilisateurs et de manipuler le DOM. Cela détermine qu'il ne peut être qu'un seul thread, sinon cela entraînera des problèmes de synchronisation très complexes.

Un fil de discussion est essentiellement un processus unique qu'un programme peut utiliser pour accomplir une tâche. Chaque thread ne peut exécuter qu'une seule tâche à la fois :

Task A --> Task B --> Task C

Chaque tâche s'exécutera séquentiellement ; une tâche doit être terminée avant que la suivante puisse commencer.

Comme mentionné précédemment, de nombreux ordinateurs possèdent désormais plusieurs cœurs et peuvent donc effectuer plusieurs opérations à la fois. Les langages de programmation qui peuvent prendre en charge plusieurs threads peuvent utiliser plusieurs cœurs pour effectuer plusieurs tâches simultanément :

Thread 1: Task A --> Task B
Thread 2: Task C --> Task D

Traditionnellement, JavaScript est monothread. Même avec plusieurs cœurs, vous ne pouvez lui faire exécuter des tâches que sur un seul thread appelé thread principal. Notre exemple ci-dessus ressemble à ceci :

Main thread: Render circles to canvas --> Display alert()

Au fil du temps, JavaScript a acquis des outils pour résoudre de tels problèmes. Les Web Workers vous permettent d'envoyer certains traitements JavaScript à un thread distinct (appelé Worker) afin que vous puissiez exécuter plusieurs blocs JavaScript en même temps. En règle générale, vous utiliserez un travailleur pour exécuter des processus coûteux sur le thread principal afin qu'il ne bloque pas l'interaction de l'utilisateur.

  Main thread: Task A --> Task C
Worker thread: Expensive task B

Dans cet esprit, ouvrez à nouveau la console JavaScript de votre navigateur et jetez un œil à simple-sync-worker.html (pour le voir fonctionner en temps réel). Il s'agit d'une réécriture de l'exemple précédent qui calculait 10 millions de dates dans un thread de travail distinct. Désormais, lorsque vous cliquerez sur le bouton, le navigateur pourra afficher le paragraphe avant la fin du calcul de la date. La première opération ne bloque plus la seconde.

Une caractéristique majeure du langage JavaScript est qu'il est monothread, ce qui signifie qu'il ne peut faire qu'une seule chose à la fois. Alors pourquoi JavaScript ne peut-il pas avoir plusieurs threads ? Cela peut améliorer l’efficacité.

JavaScript est monothread, selon son objectif. En tant que langage de script de navigateur, l'objectif principal de JavaScript est d'interagir avec les utilisateurs et de manipuler le DOM. Cela détermine qu'il ne peut être qu'un seul thread, sinon cela entraînera des problèmes de synchronisation très complexes. Par exemple, supposons que JavaScript ait deux threads en même temps. Un thread ajoute du contenu à un certain nœud DOM et l'autre thread supprime le nœud. Dans ce cas, quel thread le navigateur doit-il utiliser ?

Ainsi, afin d'éviter toute complexité, JavaScript est monothread depuis sa naissance. Cela est devenu la fonctionnalité principale de ce langage et ne changera pas à l'avenir.

Afin de profiter de la puissance de calcul des CPU multicœurs, HTML5 propose le standard Web Worker, qui permet aux scripts JavaScript de créer plusieurs threads, mais les threads enfants sont entièrement contrôlés par le thread principal et ne doivent pas faire fonctionner le DOM. . Par conséquent, cette nouvelle norme ne modifie pas la nature monothread de JavaScript.

Recommandations associées : Tutoriel d'apprentissage Javascript

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn