Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- JQuery
- 콜백 함수
- 제이쿼리
- 마소
- github
- NoSQL
- 750R
- Python
- node.js
- Javascript
- non-blocking
- AngularJS
- 크로스브라우징
- Ajax
- callback function
- MongoDB
- 빅데이터
- 테스트
- CoffeeScript
- Microsoft
- 개발환경
- npm
- CSS
- 마이크로소프트
- 웹디자인
- 인턴
- 오픈소스
- 자바스크립트
- git
Archives
- Today
- Total
Inspired World
Node.js 에서 멀티코어(Multi-core)를 사용해보자! 본문
Node.js 의 큰 특징인 이벤트 기반은 하나의 스레드를 사용함에 있어서는
비동기처리에 있어서 아주 뛰어나지만
멀티코어 CPU를 사용하는 서버에서 Node.js를 돌리다보면
나머지 사용하지 않는 코어들이 아깝게 느껴집니다.
또 그런 사용하지 않는 코어 때문에
다른 언어/웹프레임워크와의 벤치마크에서도 많이 밀리는 모습을 보여줍니다.
하지만
Node.js 0.4.x 시절에도 cluster라는 모듈이 있었고
버전이 0.6.x 가 되면서
자체 모듈로써 포함이 되면서 멀티코어에서도 Node.js를 활용할 수 있게 되었습니다.
사용 방법은 간단합니다.
위 코드 처럼 이미 작성된 http server나 express 코드를 else 부분에 넣어주고
Worker를 CPU 코어 갯수 만큼 생성하게 하면 됩니다.
또 위 예제에도 나와있듯이 death 이벤트 함수를 이용해서 Worker가 오류 발생으로 인해서 죽게 되더라도
다시 생성할 수 있게 설정할 수 있습니다.
비동기처리에 있어서 아주 뛰어나지만
멀티코어 CPU를 사용하는 서버에서 Node.js를 돌리다보면
나머지 사용하지 않는 코어들이 아깝게 느껴집니다.
또 그런 사용하지 않는 코어 때문에
다른 언어/웹프레임워크와의 벤치마크에서도 많이 밀리는 모습을 보여줍니다.
하지만
Node.js 0.4.x 시절에도 cluster라는 모듈이 있었고
버전이 0.6.x 가 되면서
자체 모듈로써 포함이 되면서 멀티코어에서도 Node.js를 활용할 수 있게 되었습니다.
사용 방법은 간단합니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} |
위 코드 처럼 이미 작성된 http server나 express 코드를 else 부분에 넣어주고
Worker를 CPU 코어 갯수 만큼 생성하게 하면 됩니다.
또 위 예제에도 나와있듯이 death 이벤트 함수를 이용해서 Worker가 오류 발생으로 인해서 죽게 되더라도
다시 생성할 수 있게 설정할 수 있습니다.
'Node.js' 카테고리의 다른 글
JavaScript 및 Node.js, 전역 객체에 접근하기 (0) | 2012.03.01 |
---|---|
Node.js 에서 require를 활용해 소스를 정리해보자 (0) | 2012.02.27 |
Node.js에서 진정한 Non-blocking 코드 구현, forAsync 모듈! (8) | 2012.02.04 |
Node.js 를 이용한 웹 개발 - Express Framework (0) | 2012.02.01 |
Node.js 설치 및 개발환경 세팅하기 (2) | 2012.01.30 |