Die zugrunde liegende Technologie, die Java Nio und NodeJs unterstützt
Wie wir alle wissen, wurde eine Unterstützung für Java Nio und NIO2 zu jüngsten Versionen von Java hinzugefügt. Gleichzeitig ist einer der am meisten geloten Vorteile des NodeJS-Technologie-Stacks der Hochleistungs-IO. Das Thema, das wir heute diskutieren werden, sind also die zugrunde liegenden Technologien, die diese Technologien unterstützen.
Eine Frage, die Sie vor dem Start stellen sollten, ist:
Warum sind Nodejs und Java Nio2 früher nicht früher erschienen?
Antwort: Ich persönlich denke, dass die zugrunde liegende Unterstützungstechnologie noch nicht ausgereift ist.
Was bedeutet die zugrunde liegende Technologie? Ja, ich denke, viele Menschen haben vermutet, dass es sich um die Betriebssystemtechnologie handelt. Die beiden in diesem Artikel vorgeschlagenen Konzepte Java Nio2 und NodeJS sind alle Benutzer-Zustand-Technologien oder Anwendungsschichttechnologien, und diese Anwendungsschichttechnologien werden unter Betriebssystem ausgeführt. Gleichzeitig sind die Programmiermodelle, die unterstützt werden können, mit der Fortschritt des Betriebssystems ebenfalls reicher. Es kann gesagt werden, dass diese beiden Technologien vollständig entwickelt sind, um die Dividenden durch den Fortschritt des Betriebssystems anzuwenden. Im Allgemeinen muss die Technologie, die diesen Bonus zuerst genießt, C/C ++ sein, da die meisten der neuesten Fortschritte im Betriebssystem Systemanrufe bereitstellen und C/C ++ am bequemsten ist, diese Systemanrufe anzuwenden, aber auch die komplexeste. Um dieselbe Leistung zu erzielen, müssen sich andere Plattformen ständig weiterentwickeln und ein Paket haben, damit Benutzer diese Dividenden verwenden können. Sobald diese Plattform stagniert und aktualisiert, ist es Zeit, dass diese Plattform sinkt. Je bequemer es ist, um zu verkörpern, desto freundlicher ist es für den Benutzer und desto mehr Personen können es es verwenden. Obwohl viele Menschen schnell Code basierend auf diesen Plattformen schreiben können, verstehen sie die Essenz oft nicht, da sie die Motivationen und Prinzipien dieser Technologien im Wesentlichen nicht verstehen. Die Technologien, die wir unten diskutieren, sind die zugrunde liegenden Technologien, die mit diesen beiden Technologien zusammenhängen.
Unabhängig davon, welches Betriebssystem -Design die folgenden 5 IO -Modelle unerlässlich sind.
1. blockieren i/o
2. Nicht blockierende i/o
3. E/A Multiplexing (Select, Poll und Epoll)
4. Signalantrieb E/O (Sigio)
5. Asynchrone E/O (die posix aio_ Funktionen)
1. blockieren i/o
Wie in der Abbildung gezeigt, besteht der Vorteil dieses IO -Modells darin, dass es einfach zu programmieren ist und auch eines der frühesten IO -Modelle ist, die von OS unterstützt werden. Der Nachteil besteht darin, dass Systeme aufruft, die die dynamische Thread -Ausführung der Benutzer blockieren, was zu einer verschwendeten CPU -Zeit und einer geringen Effizienz von IOs führt.
2. Nicht blockierende i/o
Wie in der Abbildung gezeigt, ist eine Verbesserung dieses IO-Modells, dass IO nicht blockiert ist, aber eine lange Umfrage erfordert, die auch CPU-Taktzyklen verschwendet.
3. E/A Multiplexing (Select, Poll und Epoll)
Wie in der Abbildung gezeigt, ist dieses IO -Modell das stabilste IO -Modell von OS heute. Die meisten Mainstream -Anwendungen basieren auf diesem IO -Modell wie NodeJs. Diese Plattformen verleihen diesem Modell jedoch häufig eine Kapselungsschicht, um AIO direkt zu unterstützen.
4. Signalantrieb E/O (Sigio)
Wie in der Abbildung gezeigt, zeichnet die Daten auf, dass dieses IO -Modell im Vergleich Modell 3 keine Leistungsvorteile hat und von Designern aufgrund der Instabilität der Systemunterstützung selten verwendet wird.
5. Asynchrone E/O (die posix aio_ Funktionen)
Wie in der Abbildung gezeigt, ist dieses IO -Modell das perfekteste AIO, und das Programmiermodell ist auch das einfachste, aber es gibt nur sehr wenige Osen, die das Modell perfekt unterstützen können. Online -Informationen zeigen, dass Linux diesbezüglich Anstrengungen unternimmt. Sobald das Betriebssystem in diesem Aspekt Fortschritte erzielt hat, müssen das Programmierrahmen, die Plattform und das Programmiermodell möglicherweise noch stark vereinfacht werden.
Obwohl dieses Modell selten von OS unterstützt wird, bedeutet dies nicht, dass es jetzt kein AiO -Modell gibt. Viele Frameworks haben diesen Aspekt und die AIO im Benutzermodus simuliert, sodass Benutzer den Geschäftslogikcode mehr Aufmerksamkeit schenken können.
6. Synchrone Asynchron, Blockierung und nicht blockierende
Synchron und asynchron sind für die Wechselwirkung zwischen Anwendung und Kernel. Die Daten werden gelesen und dann ist die Rückgabe synchron und die Rückgabe ist asynchron. Blockieren und Nichtblockieren sind für Prozesse und Fäden. Der Lese- oder Schreib -Thread wartet im Blockierungsmodus, anstatt den Blockierungsmodus, im Lese- oder Schreib -Thread gibt sofort einen Statuswert zurück.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.