>  기사  >  웹 프론트엔드  >  Nodejs가 멀티스레딩 처리를 수행하는 방법에 대한 간략한 설명

Nodejs가 멀티스레딩 처리를 수행하는 방법에 대한 간략한 설명

青灯夜游
青灯夜游앞으로
2021-06-04 11:14:503307검색

이 글에서는 멀티스레딩 처리를 수행하는 방법을 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. 모든 스레드는 저장 주소를 공유합니다.

Example

먼저 간단한 테스트를 해보겠습니다. 피보나치 배열을 사용하여 멀티스레딩이 포함된 노드가 얼마나 강력한지 확인합니다. (테스트 머신은 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();
})

우리는 8개의 비동기 동작을 시뮬레이션했으며 node v0.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 모듈은 노드에 새로운 활력을 주입하여 노드의 처리 문제를 비판하게 만듭니다. CPU의 문제- 집약적인 작업이 제대로 해결되었습니다. c++ 코드에 능숙하지 않더라도 멀티 스레드 및 진정한 비차단 노드 프로그램을 쉽게 작성할 수 있습니다.  

더 많은 프로그래밍 관련 지식을 보려면 프로그래밍 교육을 방문하세요! !

위 내용은 Nodejs가 멀티스레딩 처리를 수행하는 방법에 대한 간략한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제