Ich sehe in mehreren Anwendungsquellen wie Minecraft und JIrcs beide java.io, um Reactor Plugin zu implementieren (wenn ich nicht falsch liege) und auch in diesem Artikel . Also, was ist der Unterschied zwischen java.io und java.nio bei der Implementierung von Reactor Pattern? Ich meine, wie Leistungsvorteil, Prozesseffizienz usw. und wo ich gutes Tutorial bekommen kann, wenn Sie denken, dass java.io die gute Lösung ist, um Reactor Pattern zu implementieren (da Google mir Tonnen von java.nio gibt tut java.io nicht wie ich will)
Ich hoffe, Sie können eine Schlussfolgerung mit dem folgenden Informationen aus dem Buch auf Seite Nr.42
java.io. * -Klassen verwenden das Decorator-Entwurfsmuster . Der Dekorateur Entwurfsmuster bindet zur Laufzeit Aufgaben an Objekte an. Decorators sind flexibler als Vererbung, weil die Vererbung fügt den Klassen zur Kompilierungszeit die Verantwortung hinzu . Die Klassen java.io. * verwenden das Dekoratormuster, um verschiedene zu konstruieren Kombinationen von Verhalten zur Laufzeit basierend auf einigen Basisklassen.
und 43.
Java war lange nicht geeignet, um Programme zu entwickeln, die ein Viele E / A-Operationen. Darüber hinaus häufig benötigte Aufgaben wie Datei Sperren, nicht blockierende und asynchrone E / A-Operationen und Fähigkeit zu Map-Datei im Speicher waren nicht verfügbar. Nicht blockierende E / A-Vorgänge wurden durch Arbeiten wie Multithreading oder die Verwendung von JNI erreicht. Die Neue I / O-API (aka NIO ) in J2SE 1/4 hat dies geändert Lage. Die Verfügbarkeit eines Servers für die Verarbeitung mehrerer Clientanforderungen hängt effektiv von der Verwendung von E / A-Datenströmen ab. Wenn ein Server es muss Hunderte von Clients gleichzeitig verwalten, muss es in der Lage sein, I / O zu verwenden Services gleichzeitig, eine Möglichkeit, um dieses Szenario in Java gerecht zu werden ist Verwenden Sie Threads, aber mit fast eins zu eins Verhältnis von Threads (100 Clients wird 100 Threads haben) ist anfällig für einen enormen
Overhead und kann führen zu Leistungs - und Skalierbarkeitsproblemen aufgrund von Speicherstapel (d. h. jeder Thread hat seinen Stack, siehe Q34 , Q42 im Java-Abschnitt) und CPU-Kontextwechsel (d. h. zwischen Threads wechseln statt echte Berechnungen durchführen). Überwinden Dieses Problem, eine neue Reihe von nicht blockierenden I / O-Klassen wurden Einführung in die Java-Plattform im Paket java.nio. Das Nicht-Blockieren Der I / O-Mechanismus ist um Selektoren und Kanäle herum aufgebaut. Kanäle , Puffer und Selektoren sind der Kern des NIO.
und Lesen Sie mehr . Hier sind einige Referenzlinks, die Java IO gegenüber Java NIO bieten: Java IO schneller als NIO - Alt ist wieder neu! , Java IO vs. Java NIO und IO vs. NIO - Unterbrechungen, Timeouts und Puffer .
Es ist wichtig, die Unterschiede zwischen blockierenden und nicht blockierenden E / A zu verstehen. Das java.io
-Paket unterstützt NICHT nicht blockierende E / A, sodass es für eine große Anzahl von Verbindungen nicht skaliert werden kann. Darüber hinaus können Sie bei blockierenden E / A nur auf das schreckliche Ein-Client-zu-ein-Thread-Modell zurückgreifen, das für Systeme mit niedriger Latenz völlig ungeeignet ist. Ich schlage vor, dass Sie einen Blick auf diesen von mir geschriebenen Artikel werfen eine asynchrone Netzwerk-E / A-Bibliothek, die das Reaktormuster implementiert, damit Sie verstehen können, wie Nicht-Blockierung in Hochleistungssystemen eine Schlüsselrolle spielt.