cluster ?
- 싱글 스레드인 노드는 하나의 코어만 사용 ⇒ 비효율적
- cluster 모듈을 사용해 하나이상의 코어를 사용하는것
Master
- 워커들의 행동을 총관리, 워커들을 생성
- fork() 를 통해서 워커를 생성
Worker
- cpu 개수 만큼 생성됨, 실제 서버를 생성
- exit 이벤트를 통해 죽었을 경우 살리거나 다른 처리가 가능
const cluster = require('cluster');
const os = require('os');
const numCPUs = os.cpus().length; // os.cpus().length 를 통해 cpu의 개수를 구할수있다.
const http = require('http');
if(cluster.isMaster){
console.log('마스터 프로세스 아이디', process.pid);
for(let i = 0; i < numCPUs; i+=1){
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(worker.process.pid, '워커가 종료되었습니다.');
//cluster.fork(); 워커 종료시 다시 살릴수있음.
})
}else{
http.createServer((req, res) => {
res.end('http server');
}).listen(8080);
console.log(process.pid, '워커실행');
}