const { threadId, parentPort } = require('worker_threads');
parentPort.on('message', value => {
console.log('threadID: ' + threadId);
console.log('parent message: ' + value);
parentPort.postMessage('World');
parentPort.close();
});
@개발환경
-
Node v14.13.0
-
TypeScript v4.0.3
@사전설치
-
npm install --save ts-node
-
npm install --save typescript
main.ts
/**
* INFO: ts-node와 typescript가 설치되어 있어야 합니다.
* npm install --save ts-node
* npm install --save typescript
*/
import { Worker, WorkerOptions } from 'worker_threads';
function workerTs(filename: string, workerOptions: WorkerOptions) {
workerOptions.eval = true;
if (!workerOptions.workerData) {
workerOptions.workerData = {};
}
workerOptions.workerData.__filename = filename;
return new Worker(
`
const wk = require('worker_threads');
require('ts-node').register();
let file = wk.workerData.__filename;
require(file);
`,
workerOptions,
);
}
let workerPath = './worker.ts';
let myWorker = workerTs(workerPath, {});
myWorker.postMessage('Hello');
myWorker.on('message', value => {
console.log('child: ' + value);
});
worker.ts
import { threadId, parentPort } from 'worker_threads';
parentPort?.on('message', value => {
console.log('threadID: ' + threadId);
console.log('parent message: ' + value);
parentPort?.postMessage('World');
parentPort?.close();
});
실행결과
threadID: 1
child: World
parent message: Hello
@결론
-
타입스크립트로 스레드 소스를 작성하면 ts-node와 typescript 모듈이 무조건 포함되어 있어야 하므로 용량이 커집니다. 따라서, 스레드 소스는 자바스크립트 파일을 참조하는 것이 적절해 보입니다.
worker.js 예시
'컴퓨터 공학' 카테고리의 다른 글
2019년 국가 별 개발자 연봉 (0) | 2021.03.19 |
---|---|
현재 시간을 filetime, unixtime, 포맷 형식으로 출력하는 프로그램 (0) | 2021.02.23 |
이미지 대표 색상 추출 프로그램 개발 (0) | 2021.02.23 |
도커 기반 CentOS 7에서 systemctl 명령어 사용하는 방법 (0) | 2021.02.23 |
Hyper-V + WSL 기반으로 CentOS 7 설치하기 (0) | 2021.02.23 |