1. Worker_threads
- 노드에서의 멀티 스레드 방식
// Worker는 독립적인 자바스크립트의 실행 스레드
// parentPort는 메시지포트의 인스턴스
// isMainThread는 현재 코드가 메인 스레드인지 워커 스레드인지 구분
const { Worker, isMainThread, parentPort } = require('worker_threads');
if (isMainThread) // 메인 스레드 일때
{
const worker = new Worker(__filename); // __filename 파일을 워커 스레드에서 실행 시킴
// 다른 스레드 간 메세지를 주고 받을 때 사용합니다.
worker.on('message', message => console.log('from worker', message));
worker.on('exit', () => console.log('worker exit'));
// parentPort.postMessage를 통해 보내는 메세지는 worker.on를 사용한 부모스레드에서 사용가능
// worker.postMessage를 사용한 부모 스레드로부터 보내진 메세지는 parentPort.on를 사용한 스레드에서 사용가능
worker.postMessage('ping'); // 부모에서 워커로 메세지를 보낸다.
}
else // 워커 스레드
{ // 위에서 생성한 worker는 여기서 동작한다
parentPort.on('message', (value) => // 부모로 부터 메세지를 받는다.
{
console.log('from parent', value);
parentPort.postMessage('pong'); // 부모에게 메세지를 보낸다.
parentPort.close();
});
}
2. child_process
- 노드에서 다른 프로그램을 실행하고 싶거나 명령어를 수행하고 싶을 때 사용하는 모듈입니다.
- 다른 언어의 프로그램을 실행하고 결과값을 받을 수 있습니다.
- 새로운 프로세스를 띄워서 실행합니다.
// exec
const exec = require('child_process').exec;
var process = exec('dir');
process.stdout.on('data', function(data)
{
console.log(data.toString());
}); // 실행 결과 : 현재 경로의 파일 목록 표시
process.stderr.on('data', function(data)
{
console.error(data.toString());
}); // 실행 에러
// spawn
const spawn = require('child_process').spawn;
// 첫번째 인수는 명령어, 두번째 인수는 파일
var process = spawn('python', ['test.py']);
process.stdout.on('data', function(data)
{
console.log(data.toString());
}); // 실행 결과
process.stderr.on('data', function(data)
{
console.error(data.toString());
}); // 실행 에러
- exec : 쉘을 실행시켜 명령을 실행
- spawn : 새로운 프로세스를 띄워 실행, 세번째 인수로 { shell : true } 를 쓰면 쉘로 실행가능
그 외 모듈들
○ assert : 값을 비교하여 프로그램이 제대로 동작하는지 테스트하는데 사용
○ dns : 도메인 이름에 대한 IP주소를 얻어내는데 사용
○ net : TCP, IPC통신을 할때 사용
○ string_decoder : 버퍼 데이터를 문자열로 바꾸는 데 사용
○ tls : TLS와 SSL 관련된 작업할 때 사용
○ tty : 터미널과 관련된 작업할 때 사용
○ dgram : UDP와 관련된 작업을 할때 사용
○ v8 : V8엔진에 직접 접근할때 사용
○ vm : 가상 머신에 접근할떄 사용
동기 / 비동기 (0) | 2022.09.14 |
---|---|
파일 시스템 접근(fs) (0) | 2022.09.14 |
Node 내장 모듈 02 (0) | 2022.09.14 |
Node 내장 모듈 01 (0) | 2022.09.13 |
[JavaScript] process.nextTick (0) | 2022.09.13 |
댓글 영역