Hello, Android!
thread 본문
노드에서는 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) (1) | 2021.01.24 |