2010-03-24 8 views
8

Estoy tratando de optimizar múltiples conexiones por vez a un servidor de socket TCP.¿Nuevo subproceso por conexión de cliente en el servidor de socket?

¿Se considera una buena práctica, o incluso racional, iniciar un nuevo hilo en el servidor de escucha cada vez que recibo una solicitud de conexión?

¿A qué hora debería comenzar a preocuparme por un servidor basado en esta infraestructura? ¿Cuál es el número máximo de hilos de fondo que puedo trabajar, hasta que ya no tiene sentido?

La plataforma es C#, el marco es Mono, el sistema operativo objetivo es CentOS, la RAM es 2.4G, el servidor está en las nubes, y estoy esperando aproximadamente 200 solicitudes de conexión por segundo.

Respuesta

8

No, no debería tener un hilo por conexión. En su lugar, debe utilizar los métodos asincrónicos (BeginAccept/EndAccept, BeginSend/EndSend, etc.). Estos harán un uso mucho más eficiente de los recursos del sistema.

En particular, cada hilo que cree agrega sobrecarga en términos de cambios de contexto, espacio en la pila, fallas en la caché, etc. Linux es mejor administrando esto que Windows, por ejemplo, pero eso no debería ser una excusa para darle rienda suelta a crear tantos hilos como desee;)

+0

@codeka ¿Qué ocurre con el proceso por conexión? cuando el cliente se conecta al servidor. servidor crea un proceso diferente y lo redirige al cliente? –

+0

Bueno, técnicamente es lo mismo con un proceso por conexión. Es por eso que Apache (por ejemplo) ahora utiliza un grupo de "procesos de trabajo" para manejar solicitudes simultáneas, en lugar de un proceso por conexión. –

+1

+1 por mencionar los grupos de subprocesos ... podría ser un buen enfoque para que OP implemente –

Cuestiones relacionadas