Ereignis-Schleife vs Multi-Thread-blocking IO
Las ich in einem Kommentar zu server-Architektur.
http://news.ycombinator.com/item?id=520077
In diesem Kommentar, die person sagt 3 Dinge:
- Die Ereignis-Schleife, immer wieder, ist gezeigt worden, um wirklich zu glänzen, die für eine hohe Anzahl von low-activity-verbindungen.
- Im Vergleich, eine blockierende IO-Modell mit threads oder Prozessen hat sich gezeigt, Zeit und immer wieder, verringern die Latenz auf einer pro-Anfrage-basis im Vergleich zu einer event-Schleife.
- Auf einem wenig belasteten system der Unterschied nicht zu unterscheiden ist. Unter Last werden die meisten event-loops wählen Sie zu verlangsamen, blockieren die meisten Modelle wählen, um Schuppen zu laden.
Sind diese wahr?
Und auch andere Artikel, hier mit dem Titel "Warum Ereignisse Sind Eine Schlechte Idee (für High-concurrency Server)"
http://www.usenix.org/events/hotos03/tech/vonbehren.html
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Regel, wenn die Anwendung erwartet wird, zu behandeln Millionen von verbindungen, die Sie kombinieren können multi-Thread-Paradigma mit event-basiert.
Mit diesem Ansatz,
Nicht sicher, was du meinst mit "geringer Aktivität", aber ich glaube, dass der größte Faktor wäre, wie viel Sie eigentlich tun müssen, zu behandeln jede Anfrage. Unter der Annahme einer single-threaded event-loop, keine anderen Kunden bekommen würden, die Ihre Anforderungen verarbeitet, während Sie behandelt die aktuelle Anfrage. Wenn Sie brauchen, um eine Menge von Sachen zu behandeln jede Anfrage ("viel" bedeutet etwas, das nimmt erhebliche CPU-und/oder Zeit), und vorausgesetzt, dass Ihre Maschine tatsächlich in der Lage ist Multitasking effizient (d.h. die Zeit nehmen, bedeutet nicht zu warten, für eine gemeinsam genutzte Ressource, wie eine single-CPU-Maschine oder ähnliches), die Sie erhalten würden, eine bessere performance durch Multi-Tasking. Multitasking könnte ein Multithread-blocking-Modell, aber es könnte auch ein single-tasking-event-Schleife, die das sammeln der eingehenden Anfragen, die Landwirtschaft, Sie sich um eine Multithread-Arbeiter der Fabrik, die behandeln würden, diese wiederum (über multitasking) und schicken Ihnen eine Antwort so bald wie möglich.
Ich glaube nicht, dass langsame verbindungen mit dem Kunden wichtig, dass viel wie ich möchte glauben, dass die OS umgehen würden, die effizient außerhalb Ihrer app (vorausgesetzt, Sie blockieren Sie nicht die Ereignis-Schleife für mehrere Rundfahrten mit dem client mit, dass zunächst der die Anforderung initiiert hat), aber das habe ich noch nicht getestet, mich.