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_waityalnı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