MarmellataDev
article thumbnail
Published 2023. 6. 7. 15:31
nodeJS - Cluster Node.js

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
profile

MarmellataDev

@Marmellata

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!