컴퓨터 공학

타입스크립트에서 worker_threads 사용 기본 예제

혼새미로 2021. 2. 23. 23:00
반응형

"On a clear day in the middle of the desert, a young woman without a left arm is climbing up a golden ladder to the sky." from DALL-E 2

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 예시
 
 
 
 
 
 
반응형