Multithreading in Node.js

Waqar Aslam 12 Oktober 2023
Multithreading in Node.js

In Node.js trifft der Begriff multithreading nicht zu, da Node.js darauf ausgelegt ist, in einer Singlethread-Ereignisschleife ausgeführt zu werden. Node.js baut jedoch auf der JavaScript-Sprache auf, die standardmäßig Single-Threaded ist.

Node.js bietet jedoch einige Möglichkeiten, gleichzeitige Programmieraufgaben auszuführen. Eine Möglichkeit, dies zu tun, ist die Verwendung des Moduls child_process, mit dem Sie neue Prozesse erstellen können, die gleichzeitig mit dem Hauptprozess von Node.js ausgeführt werden können.

Eine andere Möglichkeit, gleichzeitige Aufgaben in Node.js auszuführen, ist die Verwendung der async/await-Syntax, mit der Sie asynchronen Code schreiben können, der so aussieht, als wäre er synchron. Dies kann es einfacher machen, Code zu schreiben, der mehrere Aufgaben gleichzeitig ausführt, ohne explizit neue Prozesse erzeugen oder Rückrufe verwenden zu müssen.

Der folgende Code verwendet beispielsweise async/await, um zwei Aufgaben gleichzeitig auszuführen.

async function runTasks() {
  const task1 = doTask1();
  const task2 = doTask2();

  await Promise.all([task1, task2]);
}

In diesem Beispiel sind doTask1 und doTask2 asynchrone Funktionen, die Promises zurückgeben. Der await-Operator wird verwendet, um auf die Auflösung beider Promises zu warten, bevor fortgefahren wird.

Dadurch können die beiden Aufgaben gleichzeitig und nicht nacheinander ausgeführt werden. Es ist erwähnenswert, dass die async/await-Syntax auf dem JavaScript-Typ Promise aufbaut, der es Ihnen ermöglicht, asynchronen Code auf eine Weise zu schreiben, die eher traditionellem synchronem Code ähnelt.

Das Modul child_process in Node.js bietet eine einfache Möglichkeit, neue Prozesse zu erzeugen. Es ermöglicht Ihnen, externe Programme wie Bash-Skripte oder andere ausführbare Dateien innerhalb eines Node.js-Programms auszuführen.

Implementieren Sie Multithreading in Node.js

Hier ist ein Beispiel für die Verwendung des Moduls child_process zum Ausführen eines Bash-Skripts.

In diesem Beispiel wird die Funktion exec verwendet, um ein Bash-Skript namens bash_script.sh auszuführen. Die Funktion übernimmt einen Rückruf, der aufgerufen wird, wenn der Prozess beendet ist.

Der Callback erhält drei Argumente: error, stdout und stderr. Diese Argumente enthalten den aufgetretenen Fehler, die Standardausgabe des Prozesses bzw. den Standardfehler des Prozesses.

Das Modul child_process bietet mehrere andere Funktionen zum Spawnen von Prozessen, wie spawn, fork und execFile. Jede dieser Funktionen hat ihre eigenen Optionen und Verhaltensweisen, sodass Sie diejenige auswählen können, die Ihren Anforderungen am besten entspricht.

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`);
});

Ausgang:

stdout:
stderr:
Script run successfully
Waqar Aslam avatar Waqar Aslam avatar

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