La entidad Epoll, un modelo de información en el kernel que se puede ver desde el espacio de usuario como envoltorio para dos conjuntos, sirve como la idea fundamental de la API EPOLLL. Dentro de esta guía, discutiremos el uso de la función Epoll en el idioma C.
Las siguientes funciones del sistema están disponibles para construir y administrar un objeto Epoll:
Desencadenado por nivel y activado por el borde
Los comportamientos activados por el borde (ET) y activados por nivel (LT) son posibles para la interfaz de circulación incidente de Epoll (LT). Las diferencias de los dos métodos se pueden resumir de la siguiente manera. Supongamos que los siguientes pasos:
La solicitud a EPOLL_WAIT (2) realizada en el Paso 5 probablemente se detendrá si el mango del documento RFD se ha asignado al Protocolo EPOLL con la señal EPOLLET (activada por el borde). Mientras tanto, el socio remoto podría anticipar una reacción dependiendo del contenido que ya suministró. Esto se debe a que la opción activada por el borde solo envía señales cada vez que el descriptor del documento observado experimenta modificaciones.
Por lo tanto, la función de la persona que llama puede tener que suspenderse para una determinada información que ya está en la memoria caché del búfer en la fase 5. En el ejemplo mencionado anteriormente, la escritura en 2 puede desencadenar una actividad que se creará en el RFD, y el incidente se recibirá en 3. La llamada a epoll_wait (2) en el paso 5 puede quedarse atascada porque la actividad de lectura en el paso 4 no utilizó toda la información del búfer.
Para evitar que una lectura o escritura de estancamiento se agote un trabajo que está administrando los diversos descriptores de archivos, un programa que utiliza la opción Epollet debe ser utilizar los descriptores de documentos que no son bloqueados. El siguiente es un procedimiento recomendado para usar la interfaz Epoll como una interfaz activada por el borde (EPOLLET):
Epoll, por otro lado, es solo una versión más rápida de la encuesta (2) y puede usarse en todas partes, la encuesta (2) se usa ya que tiene la lógica idéntica cada vez que se considera un protocolo activado por el nivel (el estándar siempre que Epollet sea no dado). La función de llamadas tiene la opción de suministrar la señal de EpolloneShot para instruir al EPOLL que cierre el descriptor de archivo vinculado al recibir una ocurrencia con EPOLL_WAIT. Mientras tanto, incluso con Epoll activado por el borde, se pueden crear muchas acciones al recepción de los diversos conjuntos de información (2). La persona que llama debe redistribuir el descriptor del documento con el EPOLL_CTL (2) y EPOLL_CTL_MOD siempre que se proporcione el indicador de EpOlLOnShot.
Ejemplo:
Aunque la lógica de Epoll cuando se usa como API de umbral es idéntica a las de la encuesta (2), el uso de comportamiento activado por el borde requiere una mayor explicación para evitar los retrasos en la cola de eventos del programa. El oyente en esta ilustración es un zócalo sin bloqueo sobre el cual se invoca la función de escucha (2). Antes de que Eagain sea administrada por la función Read (2) o Write (), el método usa la función fd () para mantener el nuevo descriptor de archivo listo (2). Una aplicación de máquina de estado basada en eventos también podría guardar su estado actual después de recibir Eagain para que pueda reanudar la lectura o la escritura en el punto anterior cuando se llama a FD () nuevamente. Mira el código fijo aquí:
Para mejorar la eficiencia, el descriptor del archivo solo se puede agregar una vez dentro de la interfaz EPOLL (EPOLL CTL ADD) designando (Epollin | Epollout) como una interfaz activada por el borde. Al ejecutar el Epoll CTL (2) con Epoll CTL MOD, puede evitar el cambio constante entre Epollin y Epollout. El código restante para esta ilustración se adjunta en la siguiente imagen:
Conclusión:
Se trata del uso de la función Epoll 7 C en el Ubuntu 20.04 Sistema operativo Linux para realizar la programación de socket. Discutimos cómo se puede usar una función Epoll () 7 C para verificar la viabilidad de los diversos descriptores de archivos para determinar si la entrada y la salida que contienen son viables o no, tanto del lado del servidor como del cliente.