¿Es select () una llamada ocupada al sistema de espera? - linux, io, ocupado-esperando

int select(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout);

Pregunta:

Sin tener en consideración timeout argumento pasado,

Hace select() ocupar ciclos de CPU, hasta que cualquier descriptor de archivo esté listo?

Respuestas

2 para la respuesta № 1

It should not be; any decent OS (including Linux, Windows y más) suspenderán el proceso si no hay FD inmediatamente disponibles. Los ciclos de CPU entre ese evento y el siguiente FD disponible están disponibles para su uso por otros procesos / subprocesos en el sistema y / o el ciclo de inactividad del sistema. Normalmente, el sistema operativo está organizado como un sistema impulsado por eventos, por lo que no es necesario verificar repetidamente los cambios en la selección: la causa de (por ejemplo, los datos disponibles para su lectura) dará como resultado que todas las selecciones activas sean informadas de esto como un lado efecto.

Sin embargo, tenga en cuenta que select () suele ser una función de envoltorio de biblioteca C para la implementación real.

Tenga en cuenta que debe borrar todos los sobresalientesFD disponibles en cada devolución exitosa, porque si no va a incurrir en la sobrecarga de llamadas del sistema sin una buena razón, y además corre el riesgo de "inanición".

Lo que podría causar el comportamiento de espera ocupada está configurandoel tiempo de espera hasta un valor cercano a cero y luego se realiza un bucle. He visto esto hecho en algunos casos porque el programador pensó que necesitaban verificar algo que no era visible como un FD


preguntas relacionadas
Menú