¿Qué es Epoll? Epoll vs Seleccione una llamada? Y cómo implementar el servidor UDP en Linux usando Epoll?

<- [if gte mso 9]> <[endif] ->
<- [if gte mso 9]> Normal 0 false false false EN-US X- NINGUNO X-NONE <[endif] -> <- [if gte mso 9]> <[endif] -> –

Hoy en el mundo de internet, ya que el número de usuarios que están aumentando día a día y para apoyar a estos usuarios que necesita servidores HTTP más eficientes.
Un problema común en la escalabilidad del servidor HTTP es cómo asegurar que el servidor gestiona un gran número de conexiones simultáneamente, sin degradar el rendimiento.
Un enfoque orientado a eventos se implementa con frecuencia en servidores de red de alto rendimiento para multiplexar un gran número de conexiones simultáneas más de un par de procesos del servidor
En servidores basados ​​en eventos, es importante que el servidor se centra en las conexiones que pueden ser atendidas sin bloquear su proceso principal.
¿Qué es Epoll
===========

?

epoll – servicio de notificación de eventos de E / S
Seleccione Vs Vs encuesta Epoll
==== ==============
El mecanismo de eventos Epoll está diseñado para escalar a un mayor número de conexiones que seleccione y sondeo
Uno de los problemas con la selección y la encuesta es que en una sola llamada ambos deben informar al kernel de todos los eventos de interés y obtener nuevos eventos.
Esto puede resultar en grandes gastos, especialmente en entornos con un gran número de conexiones y relativamente pocos nuevos eventos que ocurren.
Sin embargo, si la aplicación de servidor es la red intensiva (por ejemplo, 1000 de conexiones simultáneas y / o una alta tasa de conexión), usted debe conseguir realmente serio sobre el rendimiento.
Esta situación es a menudo llamado el problema C10K. Con select () o poll (), el servidor de red difícilmente realizar ninguna cosas útiles pero desperdiciando preciosos ciclos de CPU bajo tal carga alta.
Problema C10K
===========
Supongamos que hay 10.000 conexiones simultáneas. Por lo general, sólo un pequeño número de descriptores de archivos entre ellos, por ejemplo 10, están dispuestos a leer.
El resto 9.990 descriptores de archivos se copian y escanean sin razón, por cada llamada select () / poll ().
Otro ejemplo como:
El costo de Epoll está más cerca del número de descriptores de archivo que en realidad tienen eventos en ellos.
Si ‘ re monitoreo 200 descriptores de archivo, pero sólo 100 de ellos tienen eventos en ellos, entonces usted está (muy aproximadamente) sólo paga por los 100 descriptores de archivos activos.
Aquí es donde Epoll tiende a ofrecer una de sus principales ventajas sobre select. Si usted tiene un millar de clientes que se encuentran en su mayoría en reposo,
a continuación, cuando usted selecciona usted todavía está pagando por todo lo que uno a miles de ellos. Sin embargo, con Epoll, es como si sólo tienes unos pocos -. Sólo está pagando por los que están activas en un momento dado

Todo esto significa que se epoll conducir a una menor utilización de la CPU para la mayoría de las cargas de trabajo
Tiempo Complejidad
========= ====
style=»text-align: -> O (n) Epoll -> O (1)
class=»MsoNormal»>
Seleccione las llamadas, que son O ( n), epoll es un (1) algoritmo de O – esto significa que se escala así como el número de aumento observado descriptores de archivo.
class=»MsoNormal»> SELECT utiliza una búsqueda lineal a través de la lista de descriptores de archivos vistos, lo que provoca su O (n) el comportamiento, mientras que epoll utiliza devoluciones de llamada en la estructura de archivos del kernel
class=»MsoNormal»> Otra diferencia fundamental de epoll es que puede ser utilizado en un disparo por flanco, a diferencia provocada nivel, la moda
class=»MsoNormal»> Esto significa que usted recibe» sugerencias «cuando el núcleo cree que el descriptor de archivo se ha convertido listo para E / S, en lugar de que le digan «I / O se puede llevar a cabo en este descriptor de fichero».
n de los clientes de apoyo es un Limitación en Seleccione Llamar
========================== ====================
Uso Select call (), el número máximo de clientes a los que manipulan es 1024 (1k)

En otras palabras, el servidor es capaz de manejar sólo 1,024 cliente después de que las conexiones están fallando.
Aumento por proceso archivos max abiertos (1024) a 100.000 y aún las conexiones fallaron en 1024.
seleccione limitación
seleccione falla después de 1024 fds como FD_SETSIZE máximo en 1024.
Como una encuesta progresión natural fue juzgado junto a superar max tema fd abierto
limitación encuesta
encuesta resuelve el problema fd max. Pero como el número de clientes simultáneos comenzó a aumentar, el rendimiento disminuyó drásticamente.
hace aplicación Poll O (n) operaciones gotas internamente y el rendimiento en número de fds aumenta.

Epoll resuelve ambos problemas y dio un rendimiento impresionante.

modos
======== Disparo =====

  • Se activa Edge Modo
  • Nivel Triggered Modo

Epoll proporciona tanto desencadenado punta y modos de nivel por alarma.
En el modo de disparo por flanco, una llamada a epoll_wait regresará sólo cuando un nuevo evento está en la cola con el objeto epoll, mientras en modo disparado por nivel, epoll_wait regresarán siempre y cuando la condición se cumple.
Por ejemplo, si una tubería, registrada con epoll, ha recibido los datos, una llamada a epoll_wait volverá , la señalización de la presencia de datos a leer.
Suponga el lector sólo consume parte de los datos de la memoria intermedia. En el modo disparado por nivel, más llamadas a epoll_wait regresarán de inmediato, siempre y cuando el buffer de la tubería contenga los datos a leer.
En borde- ev;                   events[MAX_EVENTS];                />                   />                   />                   />                   />                   />                   />                  />                 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *