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.
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
Télécharger le code source du test
git clone http://github.com/xk/node-threads-a-gogo.git
Importer le code du module
var tagg= require('threads_a_gogo');
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
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(); })
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
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);
Le résultat le plus important :
165580141 165580141 165580141 165580141 165580141 165580141 165580141 165580141 8 thread: 9510ms
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!