Articulo de referencia

encuesta electrónica

epoll es una llamada al sistema del kernel de Linux para un mecanismo escalable de notificación de eventos de E/S, introducido por primera vez en la versión 2.5.45 del kernel de...

epolles una llamada al sistema del kernel de Linux para un mecanismo escalable de notificación de eventos de E/S, introducido por primera vez en la versión 2.5.45 del kernel de Linux en octubre de 2002. [ 1 ] [ 2 ] Su función es monitorear múltiples descriptores de archivo para ver si es posible la E/S en alguno de ellos. Está diseñado para reemplazar las llamadas al sistema POSIX y más antiguas , para lograr un mejor rendimiento en aplicaciones más exigentes, donde el número de descriptores de archivo monitoreados es grande (a diferencia de las llamadas al sistema más antiguas, que operan en tiempo O ( n ), opera en tiempo O (1)). [ 3 ]select(2)poll(2)epoll

epolles similar al de FreeBSDkqueue , ya que consta de un conjunto de funciones de espacio de usuario , cada una de las cuales toma un argumento de descriptor de archivo que denota el objeto del kernel configurable, contra el cual operan de forma cooperativa. epollutiliza una estructura de datos de árbol rojo-negro (árbol RB) para realizar un seguimiento de todos los descriptores de archivo que se están monitorizando actualmente. [ 4 ]

API

int epoll_create1 ( int flags );

Crea un epollobjeto y devuelve su descriptor de archivo. El flagsparámetro permite modificar el comportamiento de epoll. Solo tiene un valor válido, EPOLL_CLOEXEC. epoll_create()es una variante anterior de epoll_create1()y está obsoleta desde la versión 2.6.27 del kernel de Linux y la versión 2.9 de glibc. [ 5 ]

int epoll_ctl ( int epfd , int op , int fd , struct epoll_event * event );

Controla (configura) qué descriptores de archivo supervisa este objeto y para qué eventos. opPuede ser AÑADIR, MODIFICAR o ELIMINAR.

int epoll_wait ( int epfd , struct epoll_event * events , int maxevents , int timeout );

Espera a que ocurra cualquiera de los eventos registrados con epoll_ctl, hasta que ocurra al menos uno o transcurra el tiempo de espera. Devuelve los eventos ocurridos en events, hasta maxeventsa la vez. maxeventses el número máximo de epoll_eventdescriptores de /file que se van a monitorizar. [ 6 ] [ 7 ] En la mayoría de los casos, maxeventsse establece al valor del tamaño del *eventsargumento ( struct epoll_event* eventsarray).

Modos de activación

epollOfrece modos activados por flanco y por nivel . En el modo activado por flanco, una llamada epoll_waitsolo devolverá un valor cuando se agregue un nuevo evento a la cola del epollobjeto, mientras que en el modo activado por nivel, epoll_waitdevolverá un valor mientras se cumpla la condición.

Por ejemplo, si una tubería registrada epollha recibido datos, una llamada a epoll_waitdevolverá un valor, señalando la presencia de datos para leer. Supongamos que el lector solo consumió una parte de los datos del búfer. En el modo activado por nivel, las llamadas posteriores a epoll_waitdevolverán un valor inmediatamente, siempre que el búfer de la tubería contenga datos para leer. Sin embargo, en el modo activado por flanco, epoll_waitdevolverá un valor solo cuando se escriban nuevos datos en la tubería. [ 8 ]

Insectos

Bryan Cantrill señaló que epolltenía errores que podrían haberse evitado si hubiera aprendido de sus predecesores: puertos de finalización de entrada/salida , puertos de eventos (Solaris) y kqueue . [ 9 ] Sin embargo, gran parte de su crítica fue abordada por epolllas opciones EPOLLONESHOTde EPOLLEXCLUSIVE. EPOLLONESHOTse agregó en la versión 2.6.2 de la línea principal del kernel de Linux, publicada en febrero de 2004. EPOLLEXCLUSIVEse agregó en la versión 4.5, publicada en marzo de 2016. [ 10 ]

Véase también

Referencias

  1. Corbet, Jonathan (30 de octubre de 2002). "Desarrollo del núcleo" . LWN.net . Consultado el 15 de julio de 2025 .
  2. Torvalds, Linus (30 de octubre de 2002). "Linux v2.5.45" . linux-kernel.vger.kernel.org archivo espejo . Consultado el 15 de julio de 2025 .
  3. Oleksiy Kovyrin (13 de abril de 2006). "Uso de epoll() para programación de redes asíncronas" . Kovyrin.net . Consultado el 1 de marzo de 2014 .
  4. "La implementación de epoll (1)" . idndx.com . Septiembre de 2014.
  5. Love, Robert (2013). Programación de sistemas Linux (Segunda edición). O'Reilly. págs. 97, 98. ISBN   978-1-449-33953-1.
  6. "epoll_wait: maxevents" . 3 de junio de 2010. Consultado el 6 de julio de 2023 .
  7. "epoll_wait(2) — Página del manual de Linux" . 30-03-2023 . Consultado el 06-07-2023 .
  8. "epoll(7) - Página del manual de Linux" . Man7.org. 17 de abril de 2012. Consultado el 1 de marzo de 2014 .
  9. Archivado en Ghostarchivey la Wayback Machine: "Ubuntu mata gatitos | BSD Now 103" . YouTube . 20 de agosto de 2015.
  10. "Epoll está fundamentalmente roto 1/2" . idea.popcount.org. 2017-02-20 . Consultado el 2017-10-06 .
  • página de manual de epoll
  • parche de votación electrónica