Erst kürzlich habe ich von NIO erfahren. Was ich verstanden habe, ist, dass der Hauptvorteil von NIO ist, dass wir viele Verbindungen mit nur einem (oder wenigen) Threads verarbeiten können, dank der nicht-blockierenden Funktion von NIO. Können wir dieses Ziel nicht mithilfe von Executors und einer Liste von Worker-Threads erreichen?Warum sollte ich NIO (oder Frameworks wie Netty) anstelle von Java-Executoren verwenden?
Ich kann keinen Vorteil von NIO gegenüber Executors sehen. Stattdessen denke ich, dass Executoren besser sind als die Verwendung von NIO, da das Lesen von Nachrichten sehr einfach ist und wir zum Beispiel nur readLin() aufrufen müssen, aber in NIO sollten wir prüfen, ob die Nachricht unvollständig ist oder der Puffer mehrere Nachrichten hat.
Die Eigenschaft des Nicht-Blockierens existiert auch in der Seele von Executoren, wo wir Execute-Funktion eines Executors aufrufen, wir fügen im Grunde die Verbindung zu einem Puffer hinzu und warten, bis die feste Thread-Nummer frei ist.
Also, warum sollte jemand NIO anstelle von Executoren verwenden?
Dank
Sie nicht mehrere Buchsensperre in einem einzigen Thread verarbeiten kann. Sich hinter einem "Executor" zu verstecken, ändert das nicht. – EJP
Wenn ich Execute-Methode des Executor für jedes Socket aufgerufen und einen Executor mit nur einem Thread haben, behandelt dieser Thread diese Sockets einzeln. Liege ich falsch? –
Ja. Sie werden in der ersten Lese blockieren Sie Problem. – EJP