2010-10-28 12 views
54

Estoy diseñando un nuevo servidor que necesita soportar miles de conexiones UDP (alrededor de 100,000 sesiones). ¿Alguna entrada o sugerencia sobre cuál usar?select vs poll vs epoll

+1

¿cuál es usted? diferentes os tienen diferente específico. –

+0

Linux Redhat enterprise versión 5 – ravi

+1

@ravi: También debe verificar marcos basados ​​en eventos (asíncronos) como Twisted, donde puede escribir su servidor y probarlo con varios métodos de sondeo: [TwistedMatrix.com: Elegir un Reactor] (http : //twistedmatrix.com/documents/current/core/howto/choosing-reactor.html) –

Respuesta

17

Linux: epoll FreeBSD: kqueue Windows: ??

Hay librerías de contenedor, como libevent y libev, que pueden resumir esto por usted.

+4

+ 1 en libev, es increíble! – dcolish

+13

Ventanas: IO Puerto de finalización – kibab

+6

Y por cierto. IOCP: Windows NT 3.5, 1994; kqueue: BSD 4.1, 2000; epoll: linux kernel 2.5.44, 2002. – Soonts

37

La respuesta es epoll si está utilizando Linux, kqueue si está utilizando FreeBSD o Mac OS X, y puertos de terminación de E/S si está en Windows.

Algunas cosas adicionales que usted (casi seguro) que desee investigar son: técnicas de balanceo

  • carga
  • de subprocesos múltiples redes
  • arquitectura de base de datos
  • tablas hash perfecta

Además, es importante para notar th en UDP no tiene "conexiones" en oposición a TCP. También le conviene comenzar desde pequeño y ampliar en gran escala, ya que las soluciones de depuración basadas en red pueden ser un desafío.

+5

Gracias por la respuesta. Entiendo que no existe tal cosa llamada conexiones UDP ya que es una comunicación orientada sin conexión. La aplicación que tenía en mente se basa en la sesión, así que en lugar de la sesión, la mencioné como conexión. Mi error. También he probado más de 200,000 sesiones basadas en select con aplicación multiproceso. Solo quería optimizar. Además, iam no es nuevo en la construcción de una solución de arquitectura escalable. El equilibrio de carga puede no ser adecuado para el tipo de servidor que iam mira. Definitivamente es una red multihilo. Probablemente usará algún tipo de patrón productor/consumidor. – ravi

40

El autor de CURL escribió un artículo increíble en poll vs select vs event libraries.

+5

Esa guía no ayudó en absoluto. Básicamente asumió que todos conocían las principales diferencias entre los tres. – enigmaticPhysicist

+3

Proporcione al menos un resumen y no solo un enlace al descubierto – MikeMB

+0

@enigmaticPhysicist: estoy de acuerdo con usted. Encontré este artículo más detallado, espero que ayude: https://www.ulduzsoft.com/2014/01/select-poll-epoll-practical-difference-for-system-architects/ –

Cuestiones relacionadas