Nodejs がマルチスレッド処理を実行する方法についての簡単な説明

青灯夜游
リリース: 2021-06-24 09:32:31
転載
3311 人が閲覧しました

この記事では、Nodejs がどのようにマルチスレッド処理を行うのかを紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

Nodejs がマルチスレッド処理を実行する方法についての簡単な説明

Threads à gogo は、nodejs のネイティブ モジュールであり、このモジュールを使用すると、nodejs にマルチスレッド処理機能を持たせることができます。 [推奨学習: "nodejs チュートリアル "]

インストール方法

npm install threads_a_gogo
ログイン後にコピー

テスト ソース コードのダウンロード

git clone http://github.com/xk/node-threads-a-gogo.git  
ログイン後にコピー

モジュール コードのインポート

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
ログイン後にコピー

マルチスレッドを使用する理由

1. 並列実行、キュー不要、高速。

2. 公平性を保つため、すべてのスレッドは同じ優先度を持ちます。

3. リソースを最大限に活用し、より多くの CPU がタスク処理に参加できるようにします。

4. すべてのスレッドはストレージ アドレスを共有します。

まず簡単なテストを行い、フィボナッチ配列を使用してそれを確認し、マルチスレッド ノードを追加してみましょう。それは:(テスト マシンは 4CPU です)TAGG を通常に使用しないと、非同期は 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();
})
ログイン後にコピー

node v0 をテストするために、##8 の非同期動作をシミュレートしました。 8.16 バージョンでは、process.nextTick はまだ非同期メソッドです。最後に、出力結果は次のようになります:

165580141
165580141
165580141
165580141
165580141
165580141
165580141
165580141
no thread: 23346ms
ログイン後にコピー

次に、TAGG モジュールを使用して、8 つのフィボナッチ配列計算の同じ実行をテストし、結果がどうなるかを確認します。

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);
ログイン後にコピー

最も重要な結果:


165580141
165580141
165580141
165580141
165580141
165580141
165580141
165580141
8 thread: 9510ms
ログイン後にコピー
マルチスレッド モデルを使用しないノードと比較して、TAGG モジュールを使用した後の 4CPU サーバーでのテスト結果は次のとおりです。一歩速くなります。 2 倍以上速くなります。

TAGG モジュールには、イベントのトリガー、スムーズな終了、スレッドの動作ステータスのチェックなど、他にも多くの機能があります。つまり、TAGG モジュールは、 ノードに新しい活力を注入します。 . node が批判されていた cpu 負荷の高いタスクの処理の問題は適切に解決されました。たとえ c コードが苦手でも、マルチスレッドで真に非互換のコードを簡単に書くことができます。 ノード プログラムをブロックしています。

プログラミング関連の知識について詳しくは、

プログラミング教育をご覧ください。 !

以上がNodejs がマルチスレッド処理を実行する方法についての簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:cnblogs.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート