Cluster
기본적으로 싱글 프로세스 동작하는 노드가 CPU 코어를 모두 사용할 수 있게 해주는 모듈 입니다.
사용예제
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
console.log(`마스터 프로세스 아이디: ${process.pid}`);
// CPU 개수만큼 워커를 생산
for (let i = 0; i < numCPUs; i += 1) {
cluster.fork();
}
// 워커가 종료 되었을 때
cluster.on('exit', (worker, code, signal) => {
console.log(`${worker.process.pid}번 워커가 종료되었습니다.`);
console.log('code', code, 'signal', signal);
cluster.fork();
});
} else {
// 워커들이 포트에서 대기
http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8'});
res.write('<h1>Hello Node!</h1>');
res.end('<p>Hello Cluster!</p>');
setTimeout(() => { // 워커 존재를 확인하기 위해 1초마다 강제 종료
process.exit(0); // 프로세스 강제종료
}, 1000);
}).listen(8086);
console.log(`${process.pid}번 워커 실행`);
}
결과
마스터 프로세스 아이디: 7216
2252번 워커 실행
6112번 워커 실행
10536번 워커 실행
5668번 워커 실행
7400번 워커 실행
5924번 워커 실행
5924번 워커가 종료되었습니다.
code 0 signal null
1512번 워커 실행
5668번 워커가 종료되었습니다.
code 0 signal null
10832번 워커 실행
7400번 워커가 종료되었습니다.
code 0 signal null
2932번 워커 실행
10832번 워커가 종료되었습니다.
code 0 signal null
872번 워커 실행
872번 워커가 종료되었습니다.
code 0 signal null
9772번 워커 실행
2932번 워커가 종료되었습니다.
code 0 signal null
9504번 워커 실행
9772번 워커가 종료되었습니다.
code 0 signal null
6456번 워커 실행
9504번 워커가 종료되었습니다.
code 0 signal null
4732번 워커 실행
6456번 워커가 종료되었습니다.
code 0 signal null
2144번 워커 실행
4732번 워커가 종료되었습니다.
code 0 signal null
144번 워커 실행
144번 워커가 종료되었습니다.
code 0 signal null
10388번 워커 실행
10388번 워커가 종료되었습니다.
code 0 signal null
3488번 워커 실행
2144번 워커가 종료되었습니다.
code 0 signal null
6392번 워커 실행
3488번 워커가 종료되었습니다.
code 0 signal null
4584번 워커 실행
6392번 워커가 종료되었습니다.
code 0 signal null
9556번 워커 실행
'Node.js' 카테고리의 다른 글
NodeJS - NPM (Node Package Manager), req,res, 템플릿 엔진 (0) | 2023.06.07 |
---|---|
NodeJS - 쿠키, 세션 (0) | 2023.06.07 |
NodeJS - REST (0) | 2023.06.02 |
NodeJS - Server (0) | 2023.06.01 |
NodeJS - 예외 처리 (0) | 2023.06.01 |