Node.js의 멀티스레딩
Node.js에서 “멀티스레딩"이라는 용어는 Node.js가 단일 스레드 이벤트 루프에서 실행되도록 설계되었기 때문에 적용되지 않습니다. 그러나 Node.js는 기본적으로 단일 스레드인 JavaScript 언어 위에 구축됩니다.
그러나 Node.js는 동시 프로그래밍 작업을 수행하는 몇 가지 방법을 제공합니다. 이를 수행하는 한 가지 방법은 메인 Node.js 프로세스와 동시에 실행할 수 있는 새 프로세스를 생성할 수 있는 child_process
모듈을 사용하는 것입니다.
Node.js에서 동시 작업을 수행하는 또 다른 방법은 async/await
구문을 사용하는 것입니다. 이를 통해 동기식처럼 보이는 비동기 코드를 작성할 수 있습니다. 이렇게 하면 새 프로세스를 명시적으로 생성하거나 콜백을 사용하지 않고도 여러 작업을 동시에 수행하는 코드를 더 쉽게 작성할 수 있습니다.
예를 들어 다음 코드는 async/await
를 사용하여 두 작업을 동시에 수행합니다.
async function runTasks() {
const task1 = doTask1();
const task2 = doTask2();
await Promise.all([task1, task2]);
}
이 예에서 doTask1
및 doTask2
는 약속
을 반환하는 비동기 함수입니다. 대기
연산자는 계속하기 전에 두 약속
이 해결될 때까지 기다리는 데 사용됩니다.
이렇게 하면 두 작업을 순차적이 아닌 동시에 수행할 수 있습니다. async/await
구문은 JavaScript Promise
유형 위에 구축되어 있어 기존 동기 코드와 유사한 방식으로 비동기 코드를 작성할 수 있습니다.
Node.js의 child_process
모듈은 새 프로세스를 생성하는 쉬운 방법을 제공합니다. Node.js 프로그램 내에서 Bash 스크립트 또는 기타 실행 파일과 같은 외부 프로그램을 실행할 수 있습니다.
Node.js에서 멀티스레딩 구현
다음은 child_process
모듈을 사용하여 Bash 스크립트를 실행하는 예입니다.
이 예에서 exec
함수는 bash_script.sh
라는 Bash 스크립트를 실행하는 데 사용됩니다. 이 함수는 프로세스가 완료될 때 호출되는 콜백을 받습니다.
콜백은 error
, stdout
및 stderr
의 세 가지 인수를 받습니다. 이러한 인수에는 발생한 오류, 프로세스의 표준 출력 및 프로세스의 표준 오류가 각각 포함됩니다.
child_process
모듈은 spawn
, fork
및 execFile
과 같은 프로세스 생성을 위한 몇 가지 다른 기능을 제공합니다. 이러한 각 기능에는 고유한 옵션 및 동작 세트가 있으므로 필요에 가장 적합한 기능을 선택할 수 있습니다.
const {exec} = require('child_process');
exec('bash_script.sh', (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
}
console.log(`Script run successfully`);
});
출력:
stdout:
stderr:
Script run successfully
I am Waqar having 5+ years of software engineering experience. I have been in the industry as a javascript web and mobile developer for 3 years working with multiple frameworks such as nodejs, react js, react native, Ionic, and angular js. After which I Switched to flutter mobile development. I have 2 years of experience building android and ios apps with flutter. For the backend, I have experience with rest APIs, Aws, and firebase. I have also written articles related to problem-solving and best practices in C, C++, Javascript, C#, and power shell.
LinkedIn