Umfrage vs. Epoll-Einblick [duplicate]

Lesezeit: 1 Minute

Benutzer-Avatar
Cartesius00

Gibt es einige einfache Faustregeln für die Verwendung? poll vs. epoll in einer Umgebung mit niedriger Latenz? epoll sollte einen höheren Overhead haben, wenn nur wenige Dateideskriptoren überwacht werden. Bitte geben Sie einen Einblick, Antworten “überprüfen Sie es selbst” an anderer Stelle.

  • Persönliche Anekdote: Meine Ergebnisse beim Testen von epoll vs. poll in einem einzigen Prozess (keine Threads, keine Forks) asynchroner HTTP-Server (dh kurze Verbindungszeiten, <1000 gleichzeitige Sockets, was ~10000 Anfragen/Sek. ergibt) war, dass der Unterschied zwischen den beiden bestand Ist vernachlässigbar. Siehe meinen Kommentar zu Plaes' Antwort für den Grund.

    – CodeClown42

    8. November 2012 um 16:59 Uhr


Verwenden Sie immer poll es sei denn, alle der folgenden Punkte sind erfüllt:

  1. Sie können sicherstellen, dass Sie sich auf einem (Linux-)System befinden, das dies hat epoll oder Sie stellen einen Fallback für Systeme bereit, die dies nicht tun.
  2. Du hast ein riesig Anzahl der aktiven Dateideskriptoren (mindestens 1000-10000).
  3. Der Satz von Dateideskriptoren, mit dem Sie arbeiten, ist über einen langen Zeitraum stabil (Hinzufügen/Entfernen von Dateideskriptoren aus der epoll Liste ist genauso teuer wie eine poll Operation, da es das Betreten/Verlassen des Kernelspace erfordert).

Benutzer-Avatar
plaes

Zuerst, poll(2) ist nur pegelgesteuert, aber epoll(4) kann entweder als flanken- oder pegelgetriggerte Schnittstelle verwendet werden.

Jetzt Komplexität: poll Die Komplexität in Bezug auf die Anzahl der überwachten Deskriptoren (fds) ist O(n), da alle fds jedes Mal gescannt werden, wenn ein „Bereit“-Ereignis auftritt. epoll ist im Grunde O (1), da es nicht den linearen Scan über alle beobachteten Deskriptoren durchführt.

In Bezug auf die Portabilität – wie epoll Linux-spezifisch ist, würde ich vorschlagen, es auszuprobieren libev und libevent Bibliotheken. Sehen Sie sich auch Dan Kegels hervorragende Beschreibung an: „Das C10K-Problem“.

  • Ich glaube, der Punkt um epoll und die große O-Notation ist nicht über die Interna der beiden Funktionendaher ist es falsch zu sagen, dass “poll alle Deskriptoren scannt, während epoll dies nicht tut”. Beide werden möglicherweise bei einem einzigen Ereignis ausgelöst. Bei poll hat der Benutzer dann jedoch keine andere Wahl, als die gesamte eingereichte Liste zu durchlaufen, um die Ereignisse zu finden, während Sie bei epoll eine Liste zurückerhalten, die nur die tatsächlichen Ereignisse enthält. Das heißt, wenn der Server sehr ausgelastet ist, hat epoll keinen Vorteil. Wenn Sie jedoch sehr viele Deskriptoren über einen langen Zeitraum pflegen …

    – CodeClown42

    8. November 2012 um 16:50 Uhr


  • …und die meisten von ihnen die meiste Zeit im Leerlauf sind, hat epoll einen Vorteil, wenn Sie sehr schnelle Ereignisse mit nur wenigen Verbindungen haben. Das heißt, das O(whatever) handelt von dem, was ist möglich für die Benutzerimplementierung, nicht das tatsächliche Verhalten von poll/epoll.

    – CodeClown42

    8. November 2012 um 16:52 Uhr


  • Der wichtigste Punkt: Die Abfragekomplexität in Bezug auf die Anzahl der beobachteten Deskriptoren (fds) ist O (n), da alle fds jedes Mal gescannt werden, wenn ein “Bereit” -Ereignis auftritt. epoll ist im Grunde O (1), da es den linearen Scan nicht über alle durchführt beobachtete Deskriptoren.. So epoll skaliert besser als poll()

    – Nawaz

    16. Januar 2021 um 10:48 Uhr


  • Nach meinem Test ist die Umfrage nicht O (N). Wenn ein Deskriptor mit dem Ereignis übereinstimmt, wird es sofort zurückgegeben. Es ist ein Worst-Case-O(N).

    – xryl669

    5. März 2021 um 18:32 Uhr

  • Während Sie mit epoll die maximale Anzahl von Ereignissen, auf die Sie warten, so einstellen, dass es im schlimmsten Fall O(m) mit m < N ist.

    – xryl669

    5. März 2021 um 18:52 Uhr

epoll(7) fasst es kurz zusammen: epoll “skaliert gut für eine große Anzahl beobachteter Dateideskriptoren.” Jedoch, poll ist eine POSIX-Standardschnittstelle, verwenden Sie sie also, wenn Portabilität erforderlich ist.

  • Ja, es skaliert, aber wenn die Anzahl der fds klein ist, poll sollte schneller sein.

    – Cartesius00

    13. Januar 2012 um 22:57 Uhr

  • @James: Ich würde wirklich gerne ein paar Benchmarks dazu sehen. Aus persönlicher Erfahrung würde ich sagen, dass es keinen großen Unterschied gibt, wenn Sie etwas als Reaktion auf das Ereignis tun. Angesichts der Tatsache, dass Sie den Umfragevektor selbst pflegen müssen, würde ich sogar vermuten, dass epoll schneller ist. Der wichtige Unterschied besteht darin, wie in dieser Antwort angegeben, dass die Umfrage POSIX und daher portabler ist. epoll hat auch den Vorteil, dass es einige Funktionen mehr bietet.

    – PlasmaHH

    13. Januar 2012 um 23:01 Uhr

1351540cookie-checkUmfrage vs. Epoll-Einblick [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy