1. Synchronisierung: Mein Client (C-seitiger Aufrufer) hat eine Funktion, bevor die Funktion endet.
2. Asynchron: Ich (der C-Seitenaufrufer) rufe eine Funktion auf und kenne das Ergebnis der Funktion nicht. Ich werde benachrichtigt, d. h. eine Rückrufbenachrichtigung 🎜>
3. Blockierung: Rufen Sie einfach I (den Angerufenen auf der s-Seite, Funktion) an, ich (der Angerufene auf der s-Seite, die Funktion) komme erst zurück, wenn ich die Daten vollständig akzeptiert oder das Ergebnis erhalten habe. 4. Nicht blockierend: Es bedeutet, dass ich (Angerufener auf s-Seite, Funktion) sofort zurückkehre und den Anrufer nach Erhalt des Ergebnisses benachrichtigeFünf E/A-Modelle
(1) Blockieren von E/A (Blockieren von E/A)
I/O-Multiplexing-Technologie
select(1).select() stellt eine Datenstruktur von fd_set bereit. Jedes Element kann eine Verbindung herstellen mit einem offenen Dateihandle (sei es ein Socket-Handle, eine andere Datei oder ein benanntes Pipe- oder Gerätehandle). Wenn select() aufgerufen wird, bestimmt der Kernel die Verbindung IO Der Status ändert den Inhalt von fd_set und teilt dadurch dem Prozess, der select() ausgeführt hat, mit, welcher Socket oder welche Datei lesbar oder beschreibbar ist. Wird hauptsächlich für die Socket-Kommunikation verwendet. (2) Wenn nach der Ausführung von select keine Dateneingabe erfolgt, wartet das Programm (wenn es blockiert ist), bis Daten vorhanden sind, d. h. es besteht keine Notwendigkeit für Schleifen und Ruhezustand im Programm . (3). Bei jedem Aufruf von „select“ muss die fd_set-Sammlung vom Benutzermodus in den Kernelmodus kopiert werden. Dieser Overhead ist sehr groß, wenn es viele fd_sets gibt ). Gleichzeitig muss der Kernel bei jedem Aufruf von select alle übergebenen fd_sets durchlaufen. Dieser Overhead ist auch sehr groß, wenn viele fd_sets vorhanden sind(5) Die Anzahl der von select unterstützten Dateideskriptoren ist zu klein. Der Standardwert ist 1024poll
(1) Die Implementierung von poll ist der von select sehr ähnlich, mit der Ausnahme, dass die fd_set-Sammlung beschrieben wird ist anders. poll verwendet die pollfd-verknüpfte Listenstruktur anstelle der fd_set-Struktur von select.
(2) Keine Obergrenze für die Anzahl der Überwachungsdeskriptoren;epoll/kqueue
(1). Anzahl der Überwachungsdeskriptoren ;
(2) Die Effizienz wird verbessert, es handelt sich nicht um eine Abfragemethode und die Effizienz nimmt nicht ab, wenn die Anzahl der fd zunimmt. Nur aktive und verfügbare fds rufen die Rückruffunktion auf. Der größte Vorteil von epoll/kqueue besteht darin, dass es sich nur um Ihre „aktiven“ Verbindungen kümmert und nichts mit der Gesamtzahl der Verbindungen im tatsächlichen Netzwerk zu tun hat Umgebung ist die Effizienz von epoll/kqueue viel höher als die von select und poll. (3). Speicherkopie, Verwendung von mmap()-Dateizuordnungsspeicher, um die Nachrichtenübermittlung mit dem Kernelraum zu beschleunigen;Das obige ist der detaillierte Inhalt vonE/A-Modell der PHP7-Kernelanalyse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!