Preguntas de la entrevista: seleccione encuesta epoll
Si el número de conexiones procesadas no es muy alto, es posible que el servidor web que utiliza select/epoll no necesariamente funcione mejor que el servidor web que utiliza IO de bloqueo de subprocesos múltiples, y el retraso puede ser mayor. La ventaja de select/epoll no es que puede manejar una sola conexión más rápido, sino que puede manejar más conexiones. )
Cuando el proceso del usuario llama a select, todo el proceso se bloqueará. Al mismo tiempo, el kernel "supervisará" todos los sockets responsables de select. Cuando los datos en cualquier socket estén listos, seleccione. regresará. En este momento, el proceso del usuario llama a la operación de lectura para copiar los datos del kernel al proceso del usuario.
La E/S asincrónica no necesita ser responsable de la lectura y escritura. O será responsable de copiar los datos del kernel al proceso del usuario.
Cuando la función de selección regresa, puede encontrar el descriptor listo atravesando fd_set.
Actualmente, Select es compatible con casi todas las plataformas y su buen soporte multiplataforma también es una de sus ventajas. Una desventaja de select es que existe un límite máximo en la cantidad de descriptores de archivos que un solo proceso puede monitorear, que generalmente es 1024 en Linux. Este límite se puede aumentar modificando las definiciones de macros o incluso recompilando el kernel, pero esto también lo hará. provocar una reducción de la eficiencia.
El primer parámetro en select() proporciona el valor del fd 1 máximo monitoreado.
A diferencia de la forma en que select usa tres mapas de bits para representar tres fdsets, poll Se implementa usando un puntero pollfd.
Al igual que la función select, después de que regresa la encuesta, es necesario sondear pollfd para obtener descriptores listos.
Tanto select como poll deben recorrer los descriptores del archivo para obtener los descriptores listos después de la encuesta. vuelve. Toma lista. De hecho, una gran cantidad de clientes conectados al mismo tiempo pueden tener solo unos pocos en estado listo a la vez, por lo que a medida que aumenta la cantidad de descriptores monitoreados, su eficiencia disminuirá linealmente
La operación epoll El proceso requiere tres Las interfaces son las siguientes:
Después de crear el identificador epoll, ocupará un valor fd. Si ve /proc/process id/fd/ en Linux, puede ver este fd. Por lo tanto, después de usar epoll, debe llamar a close() para cerrarlo; de lo contrario, el fd puede agotarse.
Seleccionar, sondear y epoll son esencialmente E/S sincrónicas, porque todos deben ser responsables de leer y escribir después de que los eventos de lectura y escritura estén listos, lo que significa que el proceso de lectura y escritura está bloqueado.
La mayor ventaja de la tecnología de multiplexación de E/S es que la sobrecarga del sistema es pequeña. El sistema no tiene que crear procesos/subprocesos ni mantener estos procesos/subprocesos, lo que reduce en gran medida la sobrecarga del sistema.