Wie wir alle wissen, wurde in neueren Java-Versionen eine gewisse Unterstützung für Java NIO und NIO2 hinzugefügt. Gleichzeitig ist einer der am meisten gelobten Vorteile des NodeJS-Technologie-Stacks seine hohe Qualität -Performance IO Das Thema, das wir heute diskutieren möchten, ist die zugrunde liegende Technologie, die diese Technologien unterstützt.
Eine Frage, die Sie sich vor dem Start stellen sollten, ist:
Warum sind NodeJS und Java NIO2 nicht früher erschienen?
Antwort: Ich persönlich denke, dass die zugrunde liegende Support-Technologie noch nicht ausgereift ist.
Worauf bezieht sich die zugrunde liegende Technologie? Ja, ich denke, viele Leute haben vermutet, dass es sich um die Betriebssystemtechnologie handelt. Die beiden in diesem Artikel vorgeschlagenen Konzepte, Java NIO2 und NodeJS, sind ausnahmslos Benutzermodus-Technologien oder Technologien der Anwendungsschicht, und diese Technologien der Anwendungsschicht können gleichzeitig mit der Weiterentwicklung des Betriebssystems ausgeführt werden Unterstützung Das ProgrammiermodellModell ist ebenfalls umfangreicher. Man kann sagen, dass es sich bei diesen beiden Technologien um vollständig weiterentwickelte Technologien handelt, um die Vorteile der Weiterentwicklung der Betriebssysteme zu nutzen. Im Allgemeinen muss CC++ die erste Technologie sein, die von diesem Vorteil profitiert, da die meisten der neuesten Verbesserungen im Betriebssystem Systemaufrufe sind und CC++ diese Systemaufrufe am bequemsten anwenden kann, aber auch am komplexesten ist. Um die gleiche Leistung zu erzielen, müssen andere Plattformen sich weiterentwickeln und kapseln, damit Benutzer von diesen Boni profitieren können. Sobald diese Plattform nicht mehr aktualisiert wird, ist es an der Zeit, dass diese Plattform zurückgeht. Je komfortabler das Paket für den Nutzer ist, desto benutzerfreundlicher ist es und desto mehr Menschen können es nutzen. Obwohl viele Menschen schnell Code auf Basis dieser Plattformen schreiben können, verstehen sie oft nicht das Wesentliche, weil sie die Beweggründe und Prinzipien dieser Technologien immer noch nicht verstehen. Die Technologien, die wir im Folgenden besprechen, sind die zugrunde liegenden Technologien, die diesen beiden Technologien zugeordnet sind.
Unabhängig von der Art des Betriebssystemdesigns sind die folgenden 5 IO-Modelle unerlässlich.
1. Blockierende E/A
2. Nicht blockierende E/A
3. E/A-Multiplexing (Auswahl, Abfrage und Epoll)
4. Signalgesteuerte E/A (SIGIO)
5. O (die POSIX aio_-Funktionen)
Wie in der Abbildung gezeigt, besteht der Vorteil dieses IO-Modells darin, dass es einfach zu programmieren ist und wird auch am frühesten vom Betriebssystem unterstützt. Einer der Nachteile des E/A-Modells besteht darin, dass Systemaufrufe die Ausführung dynamischer Benutzerthreads blockieren, was zu einer Verschwendung von CPU-Zeit und einer geringen E/A-Effizienz führt.
Wie in der Abbildung gezeigt, besteht eine Verbesserung dieses IO-Modells darin, dass IO nicht blockierend, aber langwierig abfragt erforderlich, was ebenfalls CPU-Taktzyklen verschwendet.
Wie in der Abbildung gezeigt, ist dieses E/A-Modell das stabilste, das es heute gibt Betriebssystem Die meisten Mainstream-Anwendungen basieren auf diesem IO-Modell, wie z. B. NodeJS, aber diese Plattformen fügen diesem Modell oft eine Kapselungsebene hinzu, um AIO direkt zu unterstützen.
Wie in der Abbildung gezeigt, weist dieses E/A-Modell keinen Leistungsvorteil auf Modell 3. Gleichzeitig wird es aufgrund der instabilen Systemunterstützung von Designern selten verwendet.
Wie in der Abbildung gezeigt, ist dieses IO-Modell das perfekteste AIO- und Programmiermodell Es ist auch das einfachste, aber es gibt nur sehr wenige Betriebssysteme, die dieses Modell perfekt unterstützen können. Online-Informationen zeigen, dass Linux in diesem Bereich Anstrengungen unternimmt. Sobald das Betriebssystem in diesem Bereich Fortschritte macht Framework ,Die Plattform und das Programmiermodell müssen möglicherweise noch stark vereinfacht werden.
Obwohl dieses Modell vom Betriebssystem selten unterstützt wird, bedeutet dies nicht, dass es derzeit kein solches AIO-Modell gibt. Viele Frameworks haben in diesem Bereich gearbeitet und AIO im Benutzermodus simuliert, sodass Benutzer mehr Fokus haben können zum Geschäftslogikcode.
Synchronisation und asynchron sind für die Interaktion zwischen der Anwendung und dem Kernel. Das Warten, bis die Daten gelesen und dann zurückgegeben werden, ist synchron, während die direkte Rückgabe asynchron ist. Blockieren und Nichtblockieren beziehen sich auf Prozesse und Threads. Im Blockierungsmodus wartet der Lese- oder Schreibthread die ganze Zeit. Im Nichtblockierungsmodus gibt der Lese- oder Schreibthread sofort einen -Statuswert zurück.
Das obige ist der detaillierte Inhalt vonGrafische Analyse der zugrunde liegenden Technologie von NIO und NodeJS, die Java unterstützen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!