일반적으로 javascript의 이벤트루프는 싱글 스레드로 동작합니다.
하지만 Node.js는 싱글 스레드 javascript의 이벤트 루프를 활용하여 동시에 많은 작업을 수행 할 수 있습니다. (이 글에서는 자세한 설명은 생략하겠습니다.)
Node.js는 'worker_thread'를 통해 멀티 쓰레딩이 가능합니다.
쓰레드를 생성하여 메모리 공유하는 방식으로 작업이 가능하지만 독립적으로 실행하기 위해서는 'child-process' 모듈을 사용해야 합니다.
새로운 하위 프로세스를 생성하고 관리할 수 있는 기능을 제공한다.
이를 통해 다른 프로그램을 실행하거나 스크립트를 실행하는 작업을 병렬로 처리할 수 있다.
child process 모듈에는 아래 함수들이 존재한다. v22.4 버전 기준으로 작성하였습니다.
node.js 이벤트 루프를 차단하지 않고 비동기적으로 자식 프로세스를 생성합니다.
생성된 프로세스가 종료되거나 종료될때까지 이벤트 루프를 차단하는 동기적 방식으로 제공합니다.
shell을 생성하고 해당 shell 내에서 명령을 실행하며, 완료되면 stdout과 stderr 를 콜백 함수에 전달합니다.
기본적으로 shell을 먼저 생성하지 않고 명령을 직접 생성합니다.
새로운 Node.js 프로세스를 생성하고 IPC 통신 채널이 설정된 지정 모듈을 호출해 부모 자식 프로세스 간에 메시지를 보낼 수 있습니다.
Node.js 이벤트 루프를 차단하는 exec()의 동기적 버전입니다.
이벤트 루프를 차단하는 execFile()의 동기적 버전입니다.
// test.js
const { spawn } = require('child_process')
const 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());
});
# test.py
print('hello python')
위 코드 처럼 작성 한 후 node test.js를 실행하면

위 이미지 처럼 python 이 실행되는 것을 볼 수 있습니다.