2016-02-26 6 views
5

Ich werde bald einen Server namens Undertow verwenden. Die website sagt:Wenn ein Webserver nicht blockierend ist, heißt das, dass IO genauso behandelt wird wie node.js?

Undertow eine flexible performante Web-Server in Java, Bereitstellung sowohl Sperrung und non-blocking-API basiert auf NIO

non-blocking Wenn Undertow erlaubt geschrieben ist, ist, dass die gleiche als node.js? Ich meine nicht die Sprachen oder so etwas. Ich habe ein separates Projekt, bei dem ich dachte, node.js wäre eine gute Wahl gewesen, aber wenn ich ein einzelnes Produkt für mehrere Projekte verwenden könnte, wäre es hilfreich.

EDIT: Ich habe diese Frage gefunden. Java NIO non-blocking mode vs node.js asychronous operation Und ich fange an zu denken, dass ich Dinge verwirrt habe.

+0

Mögliches Duplikat von [Java NIO nicht blockierender Modus vs asynchrone Operation node.js] (http://stackoverflow.com/questions/20740961/java-nio-non-blocking-mode-vs-node-js-asynchronous -Operation) – EJP

Antwort

1

Undertow auf der JBoss XNIO Bibliothek basiert und wie NodeJS setzt XNIO auf Betriebssystemfunktionen (epoll oder kqueue wenn verfügbar) für IO-Ereignisse benachrichtigt werden (wenn Daten von einem Socket zu lesen sind verfügbar für Beispiel).

In Undertow wird die Annahme eingehender Anfragen nach diesem Modell von der IO threads durchgeführt. Blocking-Vorgänge für diese Threads würden die Bearbeitung neuer eingehender Anforderungen verzögern. See Undertow's documentation on IO threads

Neben den IO-Threads verwaltet Undertow einen anderen Thread-Pool, die Worker threads, Sperrung Aufgaben zu bewältigen (man denke an Aufgaben wie ein Web Service aufrufen oder die Abfrage einer Datenbank.) Und das ist, was Sie nicht mit NodeJS bekommen!

Um einen Worker-Thread zu verwenden, muss die Anforderungsbehandlung aus dem IO-Thread ausgelöst werden. Die API ist umfassend und einfach zu verwenden, wiederum see Undertow's documentation, als Ausgangspunkt.

+0

Meinst du mit Undertow als Node.js konnte ich viel mehr Anfragen verarbeiten? Was ist mit der Speichernutzung? –

+0

Nein, das ist nicht was ich meine. Es ist ziemlich unmöglich, eine solche Frage zu beantworten, es ergibt nicht einmal einen Sinn. Es hängt alles davon ab, was Sie in diesen Anfragen tun.Was ich damit sagen möchte, ist, dass Sie mit Undertow normale Java-Threads verwenden können - die Worker-Threads (sie werden Kernel-Threads zugeordnet), um blockierende Aufgaben (DB-Aufrufe, Dateibearbeitung ...) auszuführen, was Sie in Nodejs nicht tun können. Bei Nodejs haben Sie nicht wirklich das Problem, Aufgaben zu blockieren (wenn Sie wissen, was Sie tun), weil die meisten Bibliotheken, die Sie verwenden, erwarten, dass ein Callback aufgerufen wird, wenn die Aufgabe beendet ist. – aramaki

0

Von Wikipedia:

In der Informatik asynchronen I/O, oder nicht blockierende E/A ist eine Form der Eingabe/Ausgabe-Verarbeitung, die eine andere Verarbeitung erlaubt fortzusetzen, bevor die Übertragung beendet ist.

Nicht blockierend und asynchron sind Synonyme, und so funktionieren alle standardmäßigen node.js-Webserver.

+0

Also denkst du, es ist nur eine Wahl zwischen Umgebungen? – johnny

+0

Überhaupt nicht. Das bedeutet nur, dass die verschiedenen Webserver dieselbe Technologie für die Verarbeitung von IO verwenden. Es gibt immer noch eine Menge Unterschiede in Funktionalität und Leistung. Ich habe nicht genug Erfahrung mit den verschiedenen Servern, um eine der Optionen hier empfehlen zu können. – bolav

+0

Wikipedia falsch wieder. Asynchron und Non-Blocking sind zwei verschiedene Modelle, keine Synonyme füreinander. Im nicht blockierenden Modus ist die Übertragung entweder abgeschlossen oder nicht erfolgt, wenn der E/A-Aufruf zurückkehrt. – EJP

Verwandte Themen