Oke, 7 tahun kemudian saya memiliki jawaban yang lebih meyakinkan berdasarkan artikel ini oleh Evan Klitzke.
Pertama, alasan saya mengajukan pertanyaan di tempat pertama adalah keunggulan kinerja yang sering disebutkan epolldibandingkan dengan poll/ select. Kata yang epolllebih asimtotis lebih efisien (O (1)) daripada poll(O ( N )).
Apa yang tidak diketahui secara luas adalah bahwa hanya edge-triggered epoll yang benar-benar O (1), sementara level-trggered epoll memiliki asimptotik yang sama dengan O ( N ). Memang, rasa yang dipicu level harus memeriksa daftar fds yang ditonton setiap kali dipanggil untuk menemukan yang berpotensi memiliki lebih banyak data yang tertunda. Varietas yang dipicu edge dapat mengandalkan sinyal sebagai respons terhadap byte baru yang muncul dalam fd.
Akan menarik untuk mencari tahu, bagaimana tepatnya sebuah thread yang dilanjutkan menemukan mana yang membangunkannya, tetapi tentu saja mungkin bahwa datum ini dilewati selama bangun yang dipicu oleh epoll.
Jelas, poll/ selecttidak dapat menggunakan ujung-dipicu epoll sebagai semantik yang berbeda. Seperti yang kita lihat, penerapan dengan level-triggered epoll tidak akan membawa manfaat kinerja asimptotik. Dan mungkin, juga berdampak negatif jika faktor konstan atau suku konstan tinggi (karena tampaknya didasarkan pada patokan kasar yang saya lakukan dan kutip dalam komentar lain).
Untuk informasi lebih lanjut, silakan baca Pemblokiran I / O, Nonblocking I / O, Dan Epoll .