Maison >interface Web >js tutoriel >Comment implémenter le multi-threading en javascript

Comment implémenter le multi-threading en javascript

醉折花枝作酒筹
醉折花枝作酒筹original
2021-07-19 15:10:414175parcourir

En js, vous pouvez utiliser la classe Worker pour implémenter le multi-threading. Le format de syntaxe est "var worker = new Worker (chemin du fichier js);". Lors de l'utilisation de cette classe, elle demandera un nouveau thread du navigateur, qui est utilisé pour exécuter seul un fichier js.

Comment implémenter le multi-threading en javascript

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

Nous savons tous que JS est un langage monothread. Même certains événements asynchrones sont exécutés sur le thread principal de JS (pour plus de détails sur la façon de l'exécuter, vous pouvez lire mon autre blog sur le mécanisme d'exécution du code JS). Les requêtes asynchrones telles que setTimeout, ajax ou certains événements d'éléments DOM sont toutes exécutées sur le thread principal JS. Ces opérations n'ouvrent pas de nouveaux threads dans le navigateur pour exécution, mais lorsque ces opérations asynchrones sont exécutées, elles n'entrent dans la file d'attente des événements que lorsque. il est déclenché, puis commence à s'exécuter dans le thread principal JS.

Parlons d'abord des threads du navigateur. Les threads principaux du navigateur incluent le thread de rendu de l'interface utilisateur, le thread principal JS, le thread de déclenchement d'événements GUI et le thread de requête http.

En tant que langage de script, l'objectif principal de JS est d'interagir avec les utilisateurs et de faire fonctionner 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. (Nous n'étudierons pas ces questions ici)

Mais les langages monothread ont une certitude très fatale. Si un langage de script est exécuté et qu'un certain bloc de fonctions prend beaucoup de temps à s'exécuter, cela provoquera un blocage. Pour un tel projet, l’expérience utilisateur est très mauvaise, ce phénomène ne peut donc pas exister pendant le processus de développement du projet.

En fait, JS nous fournit une classe Worker, qui sert à résoudre ce phénomène de blocage. Lorsque nous utilisons cette classe, elle s'appliquera à un nouveau fil de discussion depuis le navigateur. Ce thread est utilisé pour exécuter un fichier js seul.

var worker = new Worker(js文件路径);

Ensuite, cette instruction s'appliquera à un thread pour exécuter le fichier js.

Bien sûr, il existe certaines méthodes dans le thread principal pour contrôler le nouveau thread et recevoir des données. Nous ne parlerons ici que de quelques-unes des méthodes les plus couramment utilisées.

//postMessage(msg);
//postMessage方法把在新线程执行的结果发送到浏览器的js引擎线程里
worker.onmessage = function(){
    //获取在新线程中执行的js文件发送的数据 用event.data接收数据
    console.log( event.data )
};
setTimeout( function(){
    worker.terminate();
    //terminate方法用于关闭worker线程
},2000)

setTimeout( function(){
    worker = new Worker("js/test22.js");
    //再次开启worker线程
},3000)

Utilisez la méthode postMessage() dans un nouveau thread pour envoyer des données au thread principal. Le thread principal utilise l'événement onmessage du travailleur pour recevoir les données, réalisant ainsi une exécution multithread de js et un échange de données entre plusieurs. fils.

【Apprentissage recommandé : Tutoriel avancé 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