Heim  >  Artikel  >  Web-Frontend  >  Der einzelne Thread eines Knotens realisiert das Prinzip der hohen Parallelität

Der einzelne Thread eines Knotens realisiert das Prinzip der hohen Parallelität

小云云
小云云Original
2018-02-07 13:36:402518Durchsuche

Dieser Artikel stellt hauptsächlich das Prinzip der Node-Single-Threaded-High-Parallelität und der Node-asynchronen E/A vor. Wenn Sie interessiert sind, können Sie davon erfahren.

1. Prinzip der Node-Single-Threaded-Implementierung mit hoher Parallelität

Wie wir alle wissen, ist nodejs eine Single-Threaded-Skriptsprache, die hohe Parallelität unterstützt . Aber warum können Single-Threaded-NodeJS eine hohe Parallelität unterstützen? Viele Leute verstehen sein Prinzip nicht. Lassen Sie mich unten über mein Verständnis sprechen:

1. Vorteile des Knotens: Die E/A-intensive Verarbeitung ist die Stärke des Knotens alles asynchron (z. B. SQL-Abfrageanforderung, Dateistream-Operationsanforderung, http-Anfrage ...)

a. Was ist asynchron?

Asynchron: Geben Sie einen Operationsbefehl aus, und dann können Sie andere Dinge tun. Nachdem alle Operationen abgeschlossen sind, wird der Rückruf ausgeführt

Asynchrones Implementierungsprinzip:


// 第一步:定义变量
let a = 1;

// 第二步:发出指令,然后把回调函数加入异步队列(回调函数并没有执行)
setTimeout(() => {
 console.log(a);
}, 0)
// 第三步:赋值,回调函数没有执行
a = 2;
// 第四步:发出指令,然后把回调函数加入异步队列(回调函数并没有执行)
setTimeout(() => {
 console.log(a);
}, 0)
// 第五步:赋值,回调函数没有执行
a = 3;
// 当所有代码执行完毕,cpu空闲下来了,就会开始执行异步队列里面的回调函数
// 所以最后控制台输出:3 3

b. Was ist asynchrone E/A?

Wie der Name schon sagt, dient asynchrone E/A dazu, E/A-Anfragen asynchron auszugeben.

c Obwohl NodeJS E/A-Anfragen asynchron ausgeben kann, unterstützt NodeJS kein Multithreading Kann es es unterstützen? Was ist mit hoher Parallelität?

Aufgrund der E/A-Operation von nodejs ist unten Multithreading aktiviert

Wenn mehrere E/A-Anfragen gleichzeitig vorliegen, erstellt der Hauptthread mehrere EIO-Threads Verbessern Sie die Effizienz der E/A-Anfragen.

Zusätzliche Wissenspunkte:

d Obwohl die E/A-Operationen von nodejs Multithreading ermöglichen, werden alle Threads basierend auf dem Hauptthread gestartet kann nur in einem Prozess ausgeführt werden. CPU-Ressourcen können nicht vollständig genutzt werden

pm2-Prozessmanager kann dieses Problem lösen

pm2 ist ein Prozessmanager für Knotenanwendungen mit Lastausgleichsfunktion.

e. CPU Die Beziehung zwischen Kernzahl und Threads

In der vergangenen Single-CPU-Ära konnte eine einzelne Aufgabe jeweils nur ein einziges Programm ausführen. Später entwickelte sich daraus die Multitasking-Stufe, bei der der Computer mehrere Aufgaben oder Prozesse parallel zum gleichen Zeitpunkt ausführen kann. Obwohl es sich nicht um den „gleichen Zeitpunkt“ im eigentlichen Sinne handelt, teilen sich mehrere Aufgaben oder Prozesse eine CPU, und es bleibt dem Betriebssystem überlassen, die laufende Umschaltung der CPU zwischen mehreren Aufgaben abzuschließen, sodass jede Aufgabe über diese verfügt Möglichkeit, bestimmte Zeitfenster für die Ausführung zu erhalten. Mit Multi-Core-CPUs können nun mehrere Aufgaben gleichzeitig ausgeführt werden. Der konkrete CPU-Kern, auf dem die Aufgabe ausgeführt wird, hängt vom Design des Betriebssystems und der CPU selbst ab

2 . Nachteile des Knotens: Nicht gut für CPU-intensive Operationen

a. Was sind CPU-intensive Operationen (komplexe Operationen, Bildoperationen)


// 这就是一个cpu密集型的操作
for (let i = 0; i < 1000000; i++) {
 console.log(i);
}

b. Warum NodeJS nicht für CPU-intensive Vorgänge geeignet ist

Weil NodeJS Single-Threaded ist

Verwandte Empfehlungen:

Einzelne Ausführliche Beschreibung Erläuterung von Threaded-JS-Ausführungsproblemen

Detaillierte Erläuterung der Eigenschaften von JS-Single-Threaded-asynchronen IO-Callbacks

Detaillierte Einführung in einige Dinge über JavaScript Single-Threading (Bild)

Das obige ist der detaillierte Inhalt vonDer einzelne Thread eines Knotens realisiert das Prinzip der hohen Parallelität. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn