Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Was sind die zugrunde liegenden Unterschiede zwischen select, epoll, kqueue und evport?

Im Allgemeinen haben alle asynchronen E/A-Subsysteme unterschiedliche Interna, aber im aktuellen speziellen Fall werden diese konkreten asynchronen E/A-Bibliotheken verwendet, um so viele Plattformen wie möglich zu unterstützen. Das heißt:

  • evportieren =Solaris 10
  • epoll =Linux
  • Einreihen =OS X, FreeBSD
  • auswählen =normalerweise auf allen installiert Plattformen als fallback

Evport , Epoll , und KQueue haben O(1) Komplexität des Deskriptorauswahlalgorithmus, und sie alle verwenden interne Kernel-Space-Speicherstrukturen. Sie können auch viele servieren (Hunderttausende) Dateideskriptoren.

Abgesehen von den anderen select kann nur bis zu 1024 bedienen Deskriptoren und führt einen vollständigen Scan der Deskriptoren durch (es werden also jedes Mal alle Deskriptoren durchlaufen, um einen auszuwählen, mit dem gearbeitet werden soll), sodass die Komplexität O(n) beträgt .