Hello, Android!

thread 본문

Node

thread

lwndnjs93 2021. 1. 30. 16:36

노드에서는 worker_threads 모듈을 활용하여 멀티 스레드를 사용할수 있다

 

우선 예제에서는 모듈의 worker, isMainThread, parentPort를 사용했다

Worker는 어떤 파일에서 워커 스레드를 실행할 것이가에 대하여 지정한다

현재는 __filename으로 지금 코드가 있는 파일에서 워커 스레드가 실행되게 했다

isMainThread는 현재 코드가 메인 스레드에서 실행되는지, 워커 스레드에서 실행되는지 판단한다

 

우선 현재 파일에서 워커 스레드가 실행되게 지정한 뒤

worker.on에 message를 사용하였는데 이는 워커 스레드에서 보내온 메세지를 받는다

worker.postmessage는 메인 스레드에서 워커 스레드로 메세지를 보낸다

이와같이 워커 스레드에 대한 설정이 끝나면 

워커 스래드는 다시 지금의 코드를 실행한다

하지만 워커 스레드는 isMainThread가 false이기 때문에 else부분만 실행이 된다

 

워커 스레드는 메인 스레드에게서 메세지를 받고 콘솔에 출력한 뒤

parentPort.postMessage에서 다시 메인 스레드에 메세지를 보내게 된다

 

만약 워커 스레드의 작업이 같은 파일이 아닌 다른 파일에 있다면

워커 스레드를 만들때 해당 스레드가 작업할 코드가 있는곳의 경로를 넣어주면 된다

 

워커 스레드를 만들때 postMessage를 사용하여 메세지를 워커스레드에 보냈지만

스레드를 만들면서 두번째 매개변수로 workerData를 사용하여 데이터를 보낼수도 있다

이번에는 여러개의 워커 스레드를 만들기 위해 set을 활용하여 스레드들을 넣었다

각각의 워커 스레드에 wokerData에 이름과 나이를 넣고 워커 스레드에 보내면

받은 데이터들의 이름의 길이와 나이를 문장으로 만들어서 반환한다

for문으로 각각의 워커 스레드를 실행한 뒤 워커 스레드의 작업이 끝나면

워커 스레드가 종료되어 worker.on("exit") 이 실행된다

'Node' 카테고리의 다른 글

파일 입출력  (0) 2021.01.31
자식 프로세스  (0) 2021.01.30
crypto 모듈  (1) 2021.01.26
exports와 require  (0) 2021.01.26
node의 내장 객체(global, console, timer)  (0) 2021.01.24