Bien, 7 años después tengo una respuesta más convincente basada en este artículo de Evan Klitzke.
En primer lugar, la razón por la que hice la pregunta en primer lugar es la ventaja de rendimiento a menudo mencionada en epollcomparación con poll/ select. La palabra dice que epolles asintóticamente más eficiente (O (1)) que poll(O ( N )).
Lo que no es tan ampliamente conocido es que solo el disparo por flanco epoll es verdaderamente O (1), mientras que el disparado por nivel epoll tiene los mismos síntomas de O ( N ). De hecho, el sabor activado por nivel tiene que pasar por la lista de archivos vistos cada vez que se llama para encontrar los que potencialmente aún tienen más datos pendientes. La variedad activada por el borde puede confiar en las señales en respuesta a los nuevos bytes que aparecen en un fd.
Sería interesante averiguar cómo exactamente un hilo reanudado descubre qué fd lo despertó, pero ciertamente es posible que este dato se transmita durante la activación activada por epoll.
Obviamente, poll/ selectno puedo usar edge-trigger epoll ya que la semántica es diferente. Como vimos, la implementación con activación por nivel epoll no traería beneficios de rendimiento asintótico. Y posiblemente, también lo afecte negativamente si los factores constantes o los términos constantes son altos (ya que parecen estar basados en un punto de referencia aproximado que hice y cité en otro comentario).
Para obtener más información, lea Bloqueo de E / S, E / S sin bloqueo y Epoll .