select /poll /epoll es un mecanismo de multiplexación IO que puede monitorear múltiples descriptores al mismo tiempo. Cuando un descriptor está listo (listo para lectura o escritura), el programa correspondiente es notificado inmediatamente para leer o escribir. Esencialmente, seleccionar /poll /epoll es I /O síncrono, es decir, la lectura y la escritura están bloqueadas.
One, seleccione
Prototipo:
int select (int n, fd_set * readfds, fd_set * writefds, fd_set * exceptfds, struct timeval * timeout);
Clases de Monitor 3 desde la función de selección Descriptores de archivo: writefds, readfds, exceptfds. Llamar a los bloques de función de selección hasta que el descriptor esté listo (los datos son legibles, se pueden escribir o se produce una excepción) o se agota el tiempo de espera, y la función regresa. Cuando la función de selección regresa, puede encontrar el descriptor listo atravesando el conjunto de descriptores.
seleccionar desventajas
Prototipo:
Int poll (struct pollfd * fds, unsigned int nfds, int timeout);
donde pollfd representa el conjunto de descriptores monitoreados, tal como sigue: struct pollfd {int fd; //descriptores de archivo eventos cortos; //monitoreado El evento de solicitud es breve reventos; //el evento ha ocurrido}; la estructura de
pollfd contiene el evento que se monitoreará y el evento que ocurrió, y no hay un límite máximo en el pollfd (pero un número demasiado grande también causará una caída en el rendimiento). Al igual que con la función de selección, cuando la función de sondeo regresa, puede encontrar el descriptor listo atravesando el conjunto de descriptores.
De lo anterior, tanto la selección como la encuesta necesitan recuperar el socket listo atravesando el descriptor de archivo después de regresar. De hecho, un gran número de clientes conectados al mismo tiempo pueden tener solo unos pocos estados listos a la vez, por lo que a medida que aumenta el número de descriptores monitoreados, su eficiencia disminuye linealmente.
Three, epoll
epoll se propone en el kernel 2.6, es una versión mejorada de select y poll. En comparación con la selección y la encuesta, epoll es más flexible y no tiene límite de descriptores. Epoll usa un descriptor de archivo para administrar múltiples descriptores, almacenando eventos en los descriptores de archivo del espacio de usuario en una tabla de eventos en el kernel, de modo que la copia en el espacio de usuario y el espacio del kernel solo se requiere una vez. El mecanismo de epoll es el mecanismo de multiplexación de E /S más eficiente de Linux, a la espera de eventos de E /S para múltiples manejadores de archivos en un solo lugar.
Select /poll tiene solo un método, y epoll tiene tres métodos, epoll_create (), epoll_ctl () y epoll_wait ().
3.1 epoll_create ()
int epoll_create (tamaño int);
se utiliza para crear un controlador para epoll, el tamaño se refiere al número de descriptores para escuchar. Ahora el núcleo es compatible con la expansión dinámica, el significado de este valor es único La cantidad de fd asignados por primera vez se expandirá dinámicamente cuando no haya suficiente espacio. Después de crear el controlador epoll, toma un valor fd.
ls /proc /< pid > /fd ///Puede ejecutarse desde el terminal. Después de ver fd
después de usar epoll, debe llamar a close (). Apague, de lo contrario puede causar que fd se agote.
3.2 epoll_ctl ()
int epoll_ctl (int epfd, int op, int fd, struct epoll_event * event);
se utiliza para realizar operaciones op en los descriptores de archivo (fd) que deben escucharse, como fd Añadir al mango epoll.
epoll_event: el evento que se escuchará, la estructura epoll_event está estructurado de la siguiente manera:
struct epoll_event {__uint32_t events; /* Epoll event * /epoll_data_t data; /* usuario disponible * *};
eventos pueden indicar correspondiente valor de descriptor de archivo :( operación)
Esta función devuelve el número de eventos que deben procesarse. Si se devuelve 0, se ha agotado el tiempo de espera.
4. Contraste
En select /poll, el proceso solo escanea todos los descriptores de archivos monitoreados después de llamar a un determinado método, y epoll registra un archivo con epoll_ctl () por adelantado. Descriptor, una vez que el descriptor de archivo está listo, el kernel utilizará un mecanismo de devolución de llamada similar a la devolución de llamada para activar rápidamente el descriptor de archivo y recibir una notificación cuando el proceso llame a epoll_wait ().
(La descripción del descriptor de archivo se elimina aquí, pero al escuchar el mecanismo de la devolución de llamada. Este es el encanto de epoll.)
ventaja de epoll
Monitoreo El número de descriptores no está limitado. El límite FD admitido es el número máximo de archivos abiertos. El número específico puede verse por cat /proc /sys /fs /file-max. En general, este número tiene una gran relación con la memoria del sistema. Este valor para teléfonos móviles es 200,000-300,000.
La eficiencia IO no aumenta con el número de disminución de la vigilancia fd. Epoll es diferente de la forma de sondeo y de sondeo, pero se implementa mediante la función de devolución de llamada definida por cada fd. Solo el fd listo ejecutará la función de devolución de llamada.
Si no lo hace un montón de inactividad de la conexión o muerto-conexión, epoll y ratio de eficiencia no selecciona /sondeo mucho más alto, pero cuando se enfrentan a un gran número de inactividad de la conexión, se encuentra Epoll es mucho más eficiente que seleccionar /sondear.
¿Sabes lo que es un sistema Linux? Algunos usuarios no saben mucho acerca de Linux. Linux es un si
El control del acceso a los archivos en Linux es un tema muy importante. Chmod es un método para mod
Demasiados archivos abiertos Los errores son fallas comunes en los sistemas Linux. Las soluciones se
Si ha usado Linux por un tiempo, siente que el disco duro no es suficiente, necesita instalar un nue
Instalación de las herramientas vmware de Linux en VMware Workstation VM
El proceso nrpe de Nagios no puede iniciar el problema
Implementar transferencia de archivos de Linux y Windows
Linux mysql portando el método
La lista de argumentos es demasiado larga "resumen de la solución de errores
Mecanismo de señal de Linux El mecanismo de señal de Linux detallado
Historia de Linux: ¿Cuál es la relación entre Linux y GNU?
Php + apache + mysql + worpress + linux platform build
Administrador inesperado Administración de Linux Seguridad integrada
Linux ssh download command wget use
Exclusión de un error de inicio del sistema Windows XP
¿Cómo mostrar /ocultar la extensión de archivo Win10?
Configuración de la computadora portátil de Windows 7: los
Establece hábilmente el método de entrada, entrada rápida con frases comunes!
Sistema Win10 para ver el método de dirección Mac
¿Cómo creo un encabezado, pie de página y salto de página? El uso de la dinámica de estilo
Resolver el problema de compartir la red de vecinos de Windows XP (2)