EMZETT.
Giriş yap

epoll ve io_uring

Kısaca: epoll ve io_uring, bir programın binlerce bağlantıyı veya dosya işlemini aynı anda verimli biçimde yürütmesini sağlayan Linux arayüzleridir.

Biraz daha ayrıntılı: Her bağlantı için bir iş parçacığını bloke etme klasik yolu kötü ölçeklenir. Olay güdümlü sunucular bunun yerine çekirdeğe hangi bağlantıların hazır olduğunu sorar.

Ayrıntılı

  • select/poll: Her çağrıda tüm listeyi iletir ve doğrusal denetler; çok bağlantıda yavaştır.
  • epoll: Çekirdek izleme listesini hatırlar. epoll_wait yalnızca hazır bağlantıları döndürür; maliyet tüm bağlantıların değil, etkin olanların sayısıyla büyür. nginx, Node.js (libuv) ve Redis’in temeli.
  • io_uring: Program ile çekirdek arasında iki halka tampon (gönderme ve tamamlanma). Program birçok işlemi sıraya koyar ve her işlem için sistem çağrısı ödemeden sonuçları toplar. Dosyalar için de çalışır.
  • Dikkat: io_uring’in bazı güvenlik sorunları oldu; bazı ortamlar onu kapatır.
  • Benzer: kqueue (BSD, macOS) ve IOCP (Windows).
  • Sonuç: Tek bir iş parçacığı on binlerce bağlantı tutabilir (C10k sorunu).

Ayrıca bak: Soketler, Halka tampon