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

青灯夜游
풀어 주다: 2021-06-24 09:32:31
앞으로
3309명이 탐색했습니다.

이 글에서는 멀티스레딩 처리를 수행하는 방법을 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으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿