thread_workers 같은 경우는 한 프로세스에 여러 스레드를 동시에 사용하는 것이지만, child_process는 프로세스를 하나 더 생성하는 겁니다.
스레드가 아니라 프로세스를 하나더 만들어서 사용하는 이유는 부피가 큰 작업을 Node.js에서 하지않고, 다른 실행환경에서 동작후 결과를 받기위해 사용합니다.
=> Node.js => PY(연산) => Node.js
npm i child_process
const childProcess = require('child_process')
childProcess.on('error', async(err) => {
try {
}
catch(err){
}
})
childProcess.on('close', async(code, signal) => {
try {
}
catch (err){
}
})
Spawn, exe로 프로세스를 생성하면, 부모(Node.js)는 비동기방식으로 자식 프로세스의 해당 데이터를 스트리밍 할 수 있습니다.
child_process.spawn(command[,args][,options]
spawn을 생성하면 stdin, stdout, stderr 파이프를 가집니다.
let process = childProcess.spawn('python', ['../test.py'])
process.stdout.on('data', (data) => {
console.log(data.toString()) // 바이너리 데이터로 넘어옵니다.
})
process.stderr.on('data', (data) => {
console.log(data.toString()
})
child_process.exec(command[,args][,options]
https://velog.io/@dev2820/nodejs%EC%9D%98-%EC%9E%90%EC%8B%9D%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4
https://medium.com/nodejs-server/node%EC%97%90%EC%84%9C-%ED%84%B0%EB%AF%B8%EB%84%90-%EB%AA%85%EB%A0%B9-%EC%8B%A4%ED%96%89-cff26a6bf83a
https://velog.io/@dev2820/nodejs%EC%9D%98-%EC%9E%90%EC%8B%9D%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4