-
노드 worker_threads노드 2023. 4. 12. 11:19
노드에서 멀티 스레드 방식으로 작업할 수 있다.
- isMainThread: 현재 코드가 메인 스레드에서 실행되는지, 워커 스레드에서 실행되는지 구분한다.
- 메인 스레드에서는 new Worker를 통해 현재 파일(__filename)을 워커 스레드에서 실행시킨다.
- worker.postMessage로 부모에서 워커로 데이터를 보낸다.
- parentPort.on('mesage')로 부모로부터 데이터를 받고, postMessage로 데이터를 보낸다.
흐름은 다음과 같다
처음은 메인이 실행되서 메인 스레드 안에서 워커 스레드들을 생성하고 워커 스레드들에게 일을 분배를 해준다.
분배를 해준 후 워커 스레드들이 일을 마치면 그걸 다시 메인 스레드로 보내서 메인 스레드에서 워커스레드들의 일을 합쳐서 최종 결과물로 리턴한다.
처음부터 워커 스레드가 일을 나눠 갖는 것이 아니라 메인 스레드에서 일을 여러개 그것도 사람이 직접 프로그래밍을 통해 분배를 해줘야 한다. 그리고 최종적으로 그 일을 합치는 것도 사람이 해야 한다.
worker_threads는 어디까지나 노드에서 멀티 스레드 방식으로 작동하게 해주는 것이지 이것이 노드를 사용하는 주된 이유가 될 수 없다. 따라서 간단한 예시만 들고 넘어가도록 하겠다.
//worker_threads.js const { Worker, isMainThread, parentPort, } = require('worker_threads'); if (isMainThread) { // 부모일 때 const worker = new Worker(__filename); worker.on('message', message => console.log('from worker', message)); worker.on('exit', () => console.log('worker exit')); worker.postMessage('ping'); } else { // 워커일 때 parentPort.on('message', (value) => { console.log('from parent', value); parentPort.postMessage('pong'); parentPort.close(); }); }
흐름은 위에 설명했던 대로 흘러간다.
'노드' 카테고리의 다른 글
노드 파일 시스템 사용하기 (0) 2023.04.12 노드 child_process (0) 2023.04.12 노드 crypto 와 util (0) 2023.04.12 노드 url, dns, searchParams (0) 2023.04.11 노드 os와 path (0) 2023.04.11