Redis verwendet eine speicherbasierte KV-Datenbank, die ein Single-Process-Single-Thread-Modell verwendet und in der Sprache C geschrieben ist. Die offiziellen Daten besagen, dass es 100.000+ qps erreichen kann. Diese Daten sind nicht schlechter als Memcached, dieselbe speicherbasierte KV-Datenbank, die Einzelprozess und Multithreading verwendet.
Der Hauptgrund, warum Redis schnell ist, ist: (Empfohlenes Lernen: Redis-Video-Tutorial)
Komplett basierend auf dem Gedächtnis
Datenstruktur Einfache und leicht zu bedienende Daten
Mehrkanal-I/O-Multiplexing-Modell verwenden
Auf den ersten und zweiten Punkt werde ich nicht näher eingehen, sondern hauptsächlich Konzentrieren Sie sich auf den dritten Punkt der Verwendung der Mehrkanal-I/O-O-Wiederverwendungstechnologie zur Erweiterung.
Das Mehrkanal-E/A-Multiplexmodell verwendet Select, Poll und Epoll, um die E/A-Ereignisse mehrerer Streams gleichzeitig zu überwachen. Im Leerlauf wird der aktuelle Thread blockiert. Wenn ein oder mehrere Streams E/A-Ereignisse haben, werden sie aus dem Blockierungszustand aktiviert, sodass das Programm alle Streams abfragt (epoll fragt nur die Streams ab, die tatsächlich Ereignisse ausgegeben haben) und nur nacheinander bereite Streams verarbeitet. Dieser Ansatz vermeidet dies viele nutzlose Operationen.
Hier bezieht sich „Mehrkanal“ auf mehrere Netzwerkverbindungen und „Wiederverwendung“ auf die Wiederverwendung desselben Threads. Durch die Verwendung der Mehrkanal-E/A-Multiplexing-Technologie kann ein einzelner Thread mehrere Verbindungsanforderungen effizient verarbeiten (wodurch der Zeitaufwand für Netzwerk-E/A minimiert wird), und Redis verarbeitet Daten im Speicher sehr schnell (In-Memory-Vorgänge werden hier kein Problem darstellen). ). Leistungsengpass), die beiden oben genannten Punkte tragen hauptsächlich zum hohen Durchsatz von Redis bei.
Im Gegensatz zu Memcached verwendet Redis Libevent nicht direkt, sondern führt eine sehr schlanke Implementierung gängiger Schnittstellen wie select, epoll, evport und kqueue durch.
Wählen Sie geeignete Schnittstellen für verschiedene Systemaufrufe. Der Standardwert ist epoll unter Linux. Da Libevent relativ umfangreich und universell einsetzbar ist, ist die Codemenge sehr groß und es verfügt über viele Funktionen, die Redis nicht verwenden kann. Um „Leichtigkeit“ zu erreichen und Abhängigkeiten zu beseitigen, hat sich Redis dafür entschieden, es selbst zu kapseln.
Vorteile eines einzelnen Prozesses und eines einzelnen Threads
Der Code ist klarer und die Verarbeitungslogik ist einfacher
Es besteht keine Notwendigkeit, verschiedene Sperrprobleme zu berücksichtigen , es gibt keinen Sperrvorgang. Es gibt keinen Leistungsverbrauch durch einen möglichen Deadlock.
Es gibt keine durch Multiprozesse oder Multithreads verursachte Umschaltung, die CPU-Leistung verbraucht
Die Nachteile eines einzelnen Prozesses und eines einzelnen Threads
Die Multi-Core-CPU-Leistung kann nicht genutzt werden, sie kann jedoch durch das Öffnen mehrerer Redis-Instanzen auf einer einzelnen Maschine verbessert werden;
Das obige ist der detaillierte Inhalt vonWarum ist der Redis-Einzelprozess schnell?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!