inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지

worker_threads

parentPort.close() 질문입니다

323

김태희

작성한 질문수 36

0

const {Worker, isMainThread, parentPort} = require('worker_threads');

if (isMainThread) {
const worker = new Worker(__filename);
worker.on('message', (value) => console.log('워커로부터', value));
worker.on('exit', () => console.log('워커 끝'));
worker.postMessage('ping');
}else {
parentPort.on('message', (value) => {
console.log('부모로부터', value);
parentPort.postMessage('pong');
parentPort.close();
})
}

 

이 코드에서 한개의 워커스레드는 parentPort.close()를 통해서 close가 됬다는것을 mainThread에 알려줘야만 worker의 exit 이벤트 (worker.on('exit'))가 실행되는걸로 이해를 했습니다 왜냐하면 저 코드에서 parentPort.close()만 없애면 프로세스가 끝나지않았기 때문입니다.

 

이와달리

const {Worker, isMainThread, parentPort, workerData } = require('worker_threads');

if (isMainThread) {
const threads = new Set();
threads.add(new Worker(__filename, {
workerData: { start: 1}
}));
threads.add(new Worker(__filename, {
workerData: { start: 2}
}));

for (let worker of threads) {
worker.on('message', (value) => console.log('워커로부터', value));
worker.on('exit', () => {
threads.delete(worker);
if (threads.size === 0) {
console.log('워커 끝')
}
});
}
}else {
parentPort.postMessage(workerData.start + 100);
}

 

워커스레드를 여러개 만들어서 간단히 100을더하는 코드는 parentPort.close()해주지 않았음에도 불구하고 worker의 exit이벤트(worker.on('exit'))를 호출할수 있고 프로세스가 정상적으로 종료가 되는지 궁금합니다

 

threads Set에서 워커스레드를 지워줬으니까 그런것 같은데 애초에 parentPort.close()해주지 않았는데 exit이벤트로 어떻게 들어가는지가 잘 이해가 안갑니다.

 

 

 

 

Sequelize nodejs mongodb mysql

답변 2

0

김태희

아하!! 정말 빠른 답변 감사합니다 :D

0

제로초(조현영)

아래 예제에서는 parentPort.on 이 없어서 그렇습니다. 첫 예제에서는 이벤트리스너가 계속 대기중이므로 워커쓰레드가 종료되지 않고 기다렸던 겁니다.

리눅스 노드 설치시 패키지

0

172

0

socket.js 에서 referer로부터 roomId를 가져올 때

0

926

3

스트리밍 방식으로 대용량 파일 업로드 & 다운로드 관련 질문

0

2297

2

a[title] 질문드립니다

0

386

1

리뉴얼 강의 및 공부 방법

0

589

1

jwt decode

0

1137

1

node.js 교과서 3판 질문드립니다

0

396

1

passport와 jwt

0

438

1

리뉴얼 강의

0

427

2

혹시 Node.js 교과서 3판 이북은 언제 나오나요?

0

359

1

몽고디비 사용자도 MYSQL부분을 들어야 하나요???

0

488

1

sql 쿼리 로그는 어떤 모듈이 작성하나요?

0

511

2

nunjucks res.render('error'); 작동을 안합니다.

0

518

1

질문있습니다.

0

348

1

multer 한글 파일 업로드시 파일명이 깨져요.

1

3543

1

수업자료는 어디있나요?

0

374

1

질문 있습니디

0

244

1

multer 사용시 file 외 name값은 못받나용?

0

429

1

코드 중복 부분 질문드립니다.

0

303

1

api 만드는 이유 질문드립니다.

0

292

1

Strategy의 done에 대해 질문드립니다.

0

373

1

안녕하세요 fs 권한 관련 질문드립니다

0

455

1

시퀄라이즈 연결질문...

0

510

2

res.setHeader vs res.cookie

0

1797

3