Maison > interface Web > js tutoriel > le corps du texte

Une brève discussion sur la façon dont Nodejs effectue le traitement multi-thread

青灯夜游
Libérer: 2021-06-24 09:32:31
avant
3282 Les gens l'ont consulté

Cet article vous présentera la méthode du multi-threading dans Nodejs. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Une brève discussion sur la façon dont Nodejs effectue le traitement multi-thread

Threads à gogo est un module natif de nodejs. L'utilisation de ce module peut permettre à nodejs d'avoir des capacités de traitement multi-thread. [Apprentissage recommandé : "Tutoriel nodejs"]

Méthode d'installation

npm install threads_a_gogo
Copier après la connexion

Télécharger le code source du test

git clone http://github.com/xk/node-threads-a-gogo.git  
Copier après la connexion

Importer le code du module

var tagg= require('threads_a_gogo');
Copier après la connexion

API

tagg= require('threads_a_gogo') //生成tagg object
var thread = tagg.create( /* no arguments */ ) //生成 thread object
var thread_pool = tagg.createPool( numberOfThreads ) //生成 thread pool
thread.load("boot.js").eval("boot()").emit("go").on("event", cb) //thread读取boot.js文件 执行boot(),发送event go,并且监听 event 事件 cb(err,result)
thread_pool.load('path') //pool中的任意(.all 为全部)thread 读取path file
pool.any.eval( program, cb ) //pool中的任意(.all 为全部)thread执行program
Copier après la connexion

Pourquoi utiliser le multi-threading ?

1. Exécution parallèle, pas besoin de faire la queue, rapide.

2. Équité, tous les fils de discussion ont la même priorité.

3. Exploitez pleinement les ressources et permettez à davantage de processeurs de participer au traitement des tâches.

4. Tous les fils de discussion partagent une adresse de stockage.

Exemple

Faisons d'abord un test simple, utilisons le tableau de Fibonacci pour le voir et ajoutons un nœud multithread Quelle est sa puissance : (La machine de test est 4CPU) Sans l'utilisation normale de TAGG, l'asynchrone ne peut pas nous aider à gérer les tâches gourmandes en CPU

function fibo (n) {
return n > 1 ? fibo(n - 1) + fibo(n - 2) : 1;
}
var n=8
function back(){
if(!--n) return console.timeEnd('no thread');
}
console.time('no thread');

process.nextTick(function(){
console.log(fibo (40));
back();
})
process.nextTick(function(){
console.log(fibo (40));
back();
})
process.nextTick(function(){
console.log(fibo (40));
back();
})
process.nextTick(function(){
console.log(fibo (40));
back();
})

process.nextTick(function(){
console.log(fibo (40));
back();
})
process.nextTick(function(){
console.log(fibo (40));
back();
})
process.nextTick(function(){
console.log(fibo (40));
back();
})
process.nextTick(function(){
console.log(fibo (40));
back();
})
Copier après la connexion

Nous avons simulé 8 comportements asynchrones pour tester la version du nœud v0.8.16, donc process.nextTick est toujours une méthode asynchrone. Enfin, notre résultat de sortie est :

165580141
165580141
165580141
165580141
165580141
165580141
165580141
165580141
no thread: 23346ms
Copier après la connexion

Ensuite, nous utilisons le module TAGG pour tester la même exécution de 8 calculs de tableaux de Fibonacci et voir quels sont les résultats ?

function fibo (n) {
return n > 1 ? fibo(n - 1) + fibo(n - 2) : 1;
}
console.time('8 thread');
var numThreads= 8; //创建线程池,最大数为8
var threadPool= require('threads_a_gogo').createPool(numThreads).all.eval(fibo); //为线程池注册程序
var i=8;
var cb = function(err,data){ //注册线程执行完毕的回调函数
console.log(data);
if(!--i){
threadPool.destroy();
console.timeEnd('8 thread');
}
}
threadPool.any.eval('fibo(40)', cb); //开始向线程池中执行fibo(40)这个任务
 
threadPool.any.eval('fibo(40)', cb);
 
threadPool.any.eval('fibo(40)', cb);
 
threadPool.any.eval('fibo(40)', cb);
 
threadPool.any.eval('fibo(40)', cb);
 
threadPool.any.eval('fibo(40)', cb);
 
threadPool.any.eval('fibo(40)', cb);
 
threadPool.any.eval('fibo(40)', cb);
Copier après la connexion

Le résultat le plus important :

165580141
165580141
165580141
165580141
165580141
165580141
165580141
165580141
8 thread: 9510ms
Copier après la connexion

Par rapport au nœud qui n'utilise pas le modèle multi-threading, après utilisation du module TAGG, nos résultats de tests sur le serveur 4CPU sont un pas plus vite. Plus du double.

Le module TAGG a de nombreuses autres fonctions, telles que le déclenchement d'événements, la sortie en douceur, la vérification de l'état de fonctionnement des threads, etc. En bref, le module TAGG injecte une nouvelle vitalité dans le nœud. le problème du nœud qui a été critiqué pour la gestion de tâches gourmandes en CPU a été correctement résolu Même si vous n'êtes pas bon en code C++, vous pouvez facilement écrire multithread et véritablement non bloquant <.> programme de nœuds.  

Pour plus de connaissances liées à la programmation, veuillez visiter :

Enseignement de la programmation ! !

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!

Étiquettes associées:
source:cnblogs.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!