2011-06-10 11 views
7

He leído un par de libros de redes para tener una idea de las diferencias entre epoll y select, pero solo cubrieron estos conceptos ligeramente. Seré apreciado si ustedes pueden proporcionarme las diferencias clave en los detalles.epoll VS select

Gracias de antemano

+0

http://stackoverflow.com/questions/2032598/caveats-of-select-poll-vs -epoll-reactors-in-twisted – Young

Respuesta

14

select es la instalación estándar de Unix para hacer S asíncrona. Su interfaz de programación es peculiar, y su implementación en la mayoría de Unixes es, en el mejor de los casos, mediocre. También impone un límite en la cantidad máxima de descriptores que un proceso puede ver, lo que es inconveniente en una aplicación. En cuanto a la eficiencia, el rendimiento de select generalmente se degrada linealmente con el número de descriptores.

epoll es una gran mejora sobre select en términos de interfaz de programación y eficiencia, pero solo se proporciona en Linux a partir de la versión 2.6. Otros Unix tienen sus llamadas especializadas, también.

1

select siempre entrega descriptores a kernel al llamar select().
Pero epoll entrega el descriptor una vez cuando se llama al epoll_ctl() y recibe eventos llamando al epoll_wait().

Y bucle 0 a max_descriptor para comprobar eventos al utilizar select.
Pero el bucle para el evento ocurrió descriptores para verificar eventos cuando se usa epoll.

Esto hace la diferencia en el rendimiento.

Y select tiene un límite de número máximo de descriptores porque usa una matriz de bits.
Pero epoll no tienen un límite porque usa la matriz de estructura.

Y select existe en la mayoría de las plataformas (Windows, Linux, Unix, BSD)
Pero epoll existe sólo en Linux.
Por supuesto, existe reemplazos de epoll en otras plataformas (IOCP en ventanas, kqueue en BSD, etc ..)