Inspired World

Node.js 에서 멀티코어(Multi-core)를 사용해보자! 본문

Node.js

Node.js 에서 멀티코어(Multi-core)를 사용해보자!

InspiredJW 2012. 2. 8. 21:39
Node.js 의 큰 특징인 이벤트 기반은 하나의 스레드를 사용함에 있어서는 

비동기처리에 있어서 아주 뛰어나지만

멀티코어 CPU를 사용하는 서버에서 Node.js를 돌리다보면

나머지 사용하지 않는 코어들이 아깝게 느껴집니다.

또 그런 사용하지 않는 코어 때문에

다른 언어/웹프레임워크와의 벤치마크에서도 많이 밀리는 모습을 보여줍니다.

하지만

Node.js 0.4.x 시절에도 cluster라는 모듈이 있었고

버전이 0.6.x 가 되면서

자체 모듈로써 포함이 되면서 멀티코어에서도 Node.js를 활용할 수 있게 되었습니다.

사용 방법은 간단합니다.

 
var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('death', function(worker) {
console.log('worker ' + worker.pid + ' died');
});
} else {
console.log("worker: %s", process.env.NODE_WORKER_ID);
var express = require('express');
var app = express.createServer();
app.get('/', function(req, res){
console.log("WORKED!! %s", process.env.NODE_WORKER_ID);
res.send('Hello World');
});
app.listen(8000);
}
view raw server.js hosted with ❤ by GitHub

위 코드 처럼 이미 작성된 http server나 express 코드를 else 부분에 넣어주고

Worker를 CPU 코어 갯수 만큼 생성하게 하면 됩니다. 

또 위 예제에도 나와있듯이 death 이벤트 함수를 이용해서 Worker가 오류 발생으로 인해서 죽게 되더라도

다시 생성할 수 있게 설정할 수 있습니다. 
Comments