Inhaltsverzeichnis
Was ist der Unterschied zwischen Poll und Select unter Linux?
Heim Betrieb und Instandhaltung Betrieb und Wartung von Linux Was ist der Unterschied zwischen poll und select unter Linux?

Was ist der Unterschied zwischen poll und select unter Linux?

Jul 11, 2022 pm 05:00 PM
linux

Der Unterschied zwischen Poll und Select unter Linux besteht darin: Die maximale Anzahl von Verbindungen, die von einem einzelnen Select-Prozess geöffnet werden können, wird durch das Makro „FD_SETSIZE“ definiert und seine Größe beträgt 32 Ganzzahlen, während Poll den Speicher verknüpfter Listen verwendet Es gibt keine maximale Anzahl von Verbindungen.

Was ist der Unterschied zwischen poll und select unter Linux?

Die Betriebsumgebung dieses Tutorials: Linux7.3-System, Dell G3-Computer.

Was ist der Unterschied zwischen Poll und Select unter Linux?

Die von jedem Prozess verwendete Auswahl hat eine Begrenzung der maximalen Anzahl von Verbindungen, die nur FD_SETSIZE sein kann, während Poll keine solche Einschränkung hat (unter Verwendung der verknüpften Listenspeicherung);

epoll und select können beide als Lösung für Multiplex-I/O bereitgestellt werden. Alle können im aktuellen Linux-Kernel unterstützt werden, wobei epoll nur für Linux gilt, während select von POSIX festgelegt und in allgemeinen Betriebssystemen implementiert werden sollte.

select wird im Wesentlichen durch Einstellungen oder Überprüfungen gespeichert Die Datenstruktur des fd-Flag-Bits wird für den nächsten Verarbeitungsschritt verwendet. Die Nachteile davon sind:

1. Die Anzahl der FDS, die von einem einzelnen Prozess überwacht werden können, ist begrenzt, dh die Größe des Überwachungsports ist begrenzt.

Im Allgemeinen hängt diese Nummer eng mit dem Systemspeicher zusammen. Die spezifische Nummer kann unter cat /proc/sys/fs/file-max angezeigt werden. Der Standardwert für 32-Bit-Maschinen ist 1024. Der Standardwert für 64-Bit-Maschinen ist 2048.

2 Beim Scannen des Sockets handelt es sich um einen linearen Scan, dh es wird die Abfragemethode verwendet, die weniger effizient ist:

Wenn viele Sockets vorhanden sind, wählen Sie(). muss jedes Mal übergeben werden. Durchlaufen Sie FD_SETSIZE-Sockets, um die Planung abzuschließen. Unabhängig davon, welcher Socket aktiv ist, wird er einmal durchlaufen. Dadurch wird viel CPU-Zeit verschwendet. Wenn Sie eine Rückruffunktion für den Socket registrieren und die relevanten Vorgänge automatisch abschließen können, können Sie Abfragen vermeiden. Dies ist, was epoll und kqueue tun.

3. Es ist notwendig, eine Datenstruktur zum Speichern einer großen Anzahl von fd aufrechtzuerhalten, was beim Übertragen der Struktur zwischen Benutzerraum und Kernelraum einen hohen Kopieraufwand verursacht as select. Das vom Benutzer übergebene Array wird in den Kernelraum kopiert und dann wird der jedem fd entsprechende Gerätestatus abgefragt. Wenn das Gerät bereit ist, wird ein Element zur Gerätewarteschlange hinzugefügt und der Durchlauf fortgesetzt Wenn nach dem Durchlaufen aller FDS kein bereites Gerät gefunden wird, bleibt der aktuelle Prozess hängen, bis das Gerät bereit ist oder die Initiative abläuft, nachdem er aufgeweckt wurde. Dieser Prozess durchlief viele unnötige Durchläufe.

Es gibt keine Begrenzung der maximalen Anzahl von Verbindungen, da es auf einer verknüpften Liste basiert, aber es hat auch einen Nachteil:

1 Eine große Anzahl von fd-Arrays wird als Ganzes zwischen dem Benutzermodus und dem kopiert Kernel-Adressraum, unabhängig davon Ist eine solche Replikation sinnvoll?​​​​​​​​​

2. Eine weitere Funktion der Umfrage ist die „horizontale Auslösung“. Wenn ein fd gemeldet, aber nicht verarbeitet wird, wird der fd beim nächsten Mal erneut gemeldet.

epoll:

epoll verfügt über zwei Triggermodi: EPOLLLT und EPOLLET LT ist der Standardmodus und ET ist der „Hochgeschwindigkeits“-Modus. Im LT-Modus gibt epoll_wait jedes Mal sein Ereignis zurück, um das Benutzerprogramm an den Betrieb zu erinnern, solange der fd noch Daten zum Lesen hat. Im ET-Modus (Flankentrigger) wird nur einmal gefragt, bis die nächsten Daten vorliegen Vor dem Inflow erfolgen keine weiteren Eingabeaufforderungen, unabhängig davon, ob in fd noch lesbare Daten vorhanden sind. Daher muss im ET-Modus beim Lesen eines fd dessen Puffer ausgelesen werden, d. h. bis der Rückgabewert von read kleiner als der angeforderte Wert ist oder ein EAGAIN-Fehler auftritt. Eine weitere Funktion besteht darin, dass epoll die Bereitschaftsbenachrichtigungsmethode „event“ verwendet, um den fd über epoll_ctl zu registrieren. Sobald der fd bereit ist, verwendet der Kernel einen rückrufähnlichen Rückrufmechanismus, um den fd zu aktivieren, und epoll_wait kann die Benachrichtigung empfangen.

Warum verfügt Epoll über den EPOLLET-Triggermodus?

Wenn der EPOLLLT-Modus übernommen wird, werden diese bei jedem Aufruf von epoll_wait zurückgegeben, sobald eine große Anzahl fertiger Dateideskriptoren im System vorhanden ist, die nicht gelesen oder geschrieben werden müssen, was die Effizienz erheblich verringert Handler beim Abrufen der benötigten fertigen Dateideskriptoren. Wenn der Edge-Trigger-Modus von EPOLLET verwendet wird und ein lesbares und beschreibbares Ereignis im überwachten Dateideskriptor auftritt, benachrichtigt epoll_wait() den Handler zum Lesen und Schreiben. Wenn dieses Mal nicht alle Daten gelesen und geschrieben werden (z. B. weil der Lese-/Schreibpuffer zu klein ist), werden Sie beim nächsten Aufruf von epoll_wait() nicht benachrichtigt, d. h., Sie werden nur einmal benachrichtigt, bis Der Dateideskriptor lautet: Sie werden erst benachrichtigt, wenn das zweite Lese-/Schreibereignis eintritt! ! ! Dieser Modus ist effizienter als horizontales Triggern und das System wird nicht mit einer großen Anzahl fertiger Dateideskriptoren überflutet, die Sie nicht interessieren:

1 Es gibt keine Begrenzung für die maximale Anzahl gleichzeitiger Verbindungen , und die Obergrenze der FDs, die geöffnet werden können, ist viel größer als 1024 (1 GB Speicher kann etwa 100.000 Ports überwachen). Anzahl der FDs steigt. Nur aktive und verfügbare FDs rufen die Rückruffunktion auf.

Der größte Vorteil von Epoll besteht darin, dass es sich nur um Ihre „aktiven“ Verbindungen kümmert und nichts mit der Gesamtzahl der Verbindungen zu tun hat Die Effizienz von Epoll wird weitaus höher sein als bei Select und Poll. 3. Speicherkopie, Verwendung des Dateizuordnungsspeichers mmap() zur Beschleunigung der Nachrichtenweitergabe mit dem Kernelraum, d. h. epoll verwendet mmap, um den Kopieraufwand zu reduzieren.

Auswählen, abfragen, epoll Zusammenfassung der Unterschiede:

1 Unterstützt die maximale Anzahl von Verbindungen, die von einem Prozess geöffnet werden können.

Auswählen. Die maximale Anzahl von Verbindungen, die von einem einzelnen geöffnet werden können Der Prozess wird durch das FD_SETSIZE-Makro definiert und seine Größe beträgt 32 Ganzzahlen (auf einem 32-Bit-Computer beträgt die Größe 3232, und auf einem 64-Bit-Computer beträgt FD_SETSIZE natürlich 3264). Ändern Sie es und kompilieren Sie den Kernel neu. Die Leistung kann jedoch beeinträchtigt werden, was weitere Tests erfordert.

poll

poll ist im Wesentlichen dasselbe wie select, es gibt jedoch keine Begrenzung der maximalen Anzahl von Verbindungen, da die Speicherung auf einer verknüpften Liste basiert

epoll

Obwohl es eine Obergrenze für die Anzahl gibt Die Anzahl der Verbindungen ist sehr groß, eine Maschine mit 1G-Speicher kann etwa 100.000 Verbindungen öffnen, und eine Maschine mit 2G-Speicher kann etwa 200.000 Verbindungen öffnen

Da die Verbindung jedes Mal verarbeitet wird, wenn sie als lineare Durchquerung bezeichnet wird, führt dies bei zunehmender FD zu einem „Leistungsproblem mit linearem Rückgang“ und langsamer Durchquerungsgeschwindigkeit.

pollGleiches wie oben

epoll

Da die Implementierung im Epoll-Kernel auf der Rückruffunktion für jeden FD basiert, rufen nur aktive Sockets aktiv den Rückruf auf. Wenn also weniger aktive Sockets vorhanden sind, wird epoll nicht verwendet Es besteht das Problem des linearen Leistungsabfalls der beiden vorherigen, aber wenn alle Sockets aktiv sind, kann es zu Leistungsproblemen kommen.

3. Nachrichtenübermittlungsmethode

select

Der Kernel muss Nachrichten an den Benutzerbereich übermitteln, was eine Kernel-Kopieraktion erfordert der Kernel und der Benutzerbereich von.

Zusammenfassung:

Zusammenfassend lässt sich sagen, dass Sie bei der Auswahl von Select, Poll oder Epoll die spezifischen Verwendungszwecke und Eigenschaften dieser drei Methoden berücksichtigen sollten.

1. Oberflächlich betrachtet hat Epoll die beste Leistung, aber wenn die Anzahl der Verbindungen gering und die Verbindungen sehr aktiv sind, ist die Leistung von Select und Poll möglicherweise besser als die von Epoll. Schließlich erfordert der Benachrichtigungsmechanismus von Epoll viele Funktionen Rückrufe.

2. Select ist ineffizient, da es jedes Mal abgefragt werden muss. Aber Ineffizienz ist auch relativ, je nach Situation kann sie auch durch gutes Design verbessert werden

Lernempfehlung:

Linux-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen poll und select unter Linux?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Unterschied zwischen CentOS und Ubuntu Unterschied zwischen CentOS und Ubuntu Apr 14, 2025 pm 09:09 PM

Die wichtigsten Unterschiede zwischen CentOS und Ubuntu sind: Ursprung (CentOS stammt von Red Hat, für Unternehmen; Ubuntu stammt aus Debian, für Einzelpersonen), Packungsmanagement (CentOS verwendet yum, konzentriert sich auf Stabilität; Ubuntu verwendet apt, für hohe Aktualisierungsfrequenz), Support Cycle (Centos) (CENTOS bieten 10 Jahre. Tutorials und Dokumente), Verwendungen (CentOS ist auf Server voreingenommen, Ubuntu ist für Server und Desktops geeignet). Weitere Unterschiede sind die Einfachheit der Installation (CentOS ist dünn)

So installieren Sie CentOs So installieren Sie CentOs Apr 14, 2025 pm 09:03 PM

CentOS -Installationsschritte: Laden Sie das ISO -Bild herunter und verbrennen Sie bootfähige Medien. Starten und wählen Sie die Installationsquelle; Wählen Sie das Layout der Sprache und Tastatur aus. Konfigurieren Sie das Netzwerk; Partition die Festplatte; Setzen Sie die Systemuhr; Erstellen Sie den Root -Benutzer; Wählen Sie das Softwarepaket aus; Starten Sie die Installation; Starten Sie nach Abschluss der Installation von der Festplatte neu und starten Sie von der Festplatte.

CentOS 'Wahl nach der Beendigung der Wartung CentOS 'Wahl nach der Beendigung der Wartung Apr 14, 2025 pm 08:51 PM

CentOS wurde eingestellt, Alternativen umfassen: 1. Rocky Linux (beste Kompatibilität); 2. Almalinux (kompatibel mit CentOS); 3. Ubuntu Server (Konfiguration erforderlich); 4. Red Hat Enterprise Linux (kommerzielle Version, bezahlte Lizenz); 5. Oracle Linux (kompatibel mit CentOS und RHEL). Bei der Migration sind Überlegungen: Kompatibilität, Verfügbarkeit, Unterstützung, Kosten und Unterstützung in der Gemeinde.

So verwenden Sie Docker Desktop So verwenden Sie Docker Desktop Apr 15, 2025 am 11:45 AM

Wie benutze ich Docker Desktop? Docker Desktop ist ein Werkzeug zum Ausführen von Docker -Containern auf lokalen Maschinen. Zu den zu verwendenden Schritten gehören: 1.. Docker Desktop installieren; 2. Start Docker Desktop; 3.. Erstellen Sie das Docker -Bild (mit Dockerfile); 4. Build Docker Image (mit Docker Build); 5. Docker -Container ausführen (mit Docker Run).

Detaillierte Erklärung des Docker -Prinzips Detaillierte Erklärung des Docker -Prinzips Apr 14, 2025 pm 11:57 PM

Docker verwendet Linux -Kernel -Funktionen, um eine effiziente und isolierte Anwendungsumgebung zu bieten. Sein Arbeitsprinzip lautet wie folgt: 1. Der Spiegel wird als schreibgeschützte Vorlage verwendet, die alles enthält, was Sie für die Ausführung der Anwendung benötigen. 2. Das Union File System (UnionFS) stapelt mehrere Dateisysteme, speichert nur die Unterschiede, speichert Platz und beschleunigt. 3. Der Daemon verwaltet die Spiegel und Container, und der Kunde verwendet sie für die Interaktion. 4. Namespaces und CGroups implementieren Container -Isolation und Ressourcenbeschränkungen; 5. Mehrere Netzwerkmodi unterstützen die Containerverbindung. Nur wenn Sie diese Kernkonzepte verstehen, können Sie Docker besser nutzen.

Was zu tun ist, nachdem CentOS die Wartung gestoppt hat Was zu tun ist, nachdem CentOS die Wartung gestoppt hat Apr 14, 2025 pm 08:48 PM

Nachdem CentOS gestoppt wurde, können Benutzer die folgenden Maßnahmen ergreifen, um sich damit zu befassen: Wählen Sie eine kompatible Verteilung aus: wie Almalinux, Rocky Linux und CentOS Stream. Migrieren Sie auf kommerzielle Verteilungen: wie Red Hat Enterprise Linux, Oracle Linux. Upgrade auf CentOS 9 Stream: Rolling Distribution und bietet die neueste Technologie. Wählen Sie andere Linux -Verteilungen aus: wie Ubuntu, Debian. Bewerten Sie andere Optionen wie Container, virtuelle Maschinen oder Cloud -Plattformen.

Was tun, wenn das Docker -Bild fehlschlägt? Was tun, wenn das Docker -Bild fehlschlägt? Apr 15, 2025 am 11:21 AM

Fehlerbehebung Schritte für fehlgeschlagene Docker -Bild Build: Überprüfen Sie die Dockerfile -Syntax und die Abhängigkeitsversion. Überprüfen Sie, ob der Build -Kontext den erforderlichen Quellcode und die erforderlichen Abhängigkeiten enthält. Sehen Sie sich das Build -Protokoll für Fehlerdetails an. Verwenden Sie die Option -Target -Option, um eine hierarchische Phase zu erstellen, um Fehlerpunkte zu identifizieren. Verwenden Sie die neueste Version von Docker Engine. Erstellen Sie das Bild mit--t [Bildname]: Debugg-Modus, um das Problem zu debuggen. Überprüfen Sie den Speicherplatz und stellen Sie sicher, dass dies ausreicht. Deaktivieren Sie Selinux, um eine Störung des Build -Prozesses zu verhindern. Fragen Sie Community -Plattformen um Hilfe, stellen Sie Dockerfiles an und erstellen Sie Protokollbeschreibungen für genauere Vorschläge.

Welche Computerkonfiguration ist für VSCODE erforderlich? Welche Computerkonfiguration ist für VSCODE erforderlich? Apr 15, 2025 pm 09:48 PM

VS Code system requirements: Operating system: Windows 10 and above, macOS 10.12 and above, Linux distribution processor: minimum 1.6 GHz, recommended 2.0 GHz and above memory: minimum 512 MB, recommended 4 GB and above storage space: minimum 250 MB, recommended 1 GB and above other requirements: stable network connection, Xorg/Wayland (Linux)

See all articles