Los sistemas operativos modernos utilizan mecanismos como epoll en Linux y kqueue en BSD para resolver el problema de la ineficiencia en la espera de entrada y salida (I/O). A diferencia de los métodos antiguos select y poll, que requerían escanear repetidamente listas de descriptores de archivo, estas APIs permiten al kernel notificar al usuario solo cuando un evento ocurre, reduciendo drásticamente el consumo de CPU en servidores de alta concurrencia.
El mecanismo central es el registro de intereses: el usuario registra un descriptor de archivo con el kernel una sola vez. El sistema luego gestiona internamente el estado de los descriptores y avisa al proceso únicamente cuando el estado cambia. Esto convierte la espera en proporcional a la actividad real, no a la capacidad total de conexiones. En Linux, epoll ofrece dos modos: nivel-activado, que notifica mientras la condición se mantiene, y borde-activado, que solo notifica al cambiar de estado, requiriendo código no bloqueante para evitar errores sutiles.
kqueue, presente en sistemas BSD y macOS, es más general que epoll, permitiendo monitorizar no solo sockets, sino también cambios en archivos, señales, temporizadores y el ciclo de vida de procesos. Esta flexibilidad lo hace más expresivo, aunque requiere una gestión más cuidadosa de los eventos.
El impacto de estas APIs es fundamental para la concurrencia moderna. El runtime de Go, por ejemplo, construye su programador de red directamente sobre epoll y kqueue. Al usar sockets no bloqueantes y registrarlos en estas estructuras, Go logra una alta concurrencia sin exponer la complejidad asíncrona al código del usuario, demostrando cómo estas herramientas han transformado el diseño de sistemas de alto rendimiento.
