Pool de Threads

Temas relacionados con la programación de aplicaciones que funcionan sobre un servidor.
Responder
Mensaje
Autor
manolin66
Mensajes: 2
Registrado: 15/06/2009 9:06 am

Pool de Threads

#1 Mensaje por manolin66 » 15/06/2009 9:38 am

Buenos días! Estoy haciendo un proyecto cliente-servidor que realiza una shell remota en Linux. Uno de los requisitos es realizar un pool de 4 hilos. Esto es, debo atender a 4 clientes (4 hilos) y los demás se quedaran esperando hasta que quede alǵun hilo libre. Más o menos me defiendo con los hilos pero implementandolos en una aplicación cliente-servidor con sincronización me pierdo un poco. La historia es más o menos así:

El main:

1) En el main creo los 4 hilos y lo hago el accept
2) si todos los hilos están ocupados se bloquea a la espera de uno libre, pero, debo seguir atendiendo las conexiones de otros clientes aunque estos no hagan nada hasta que quede algún hilo libre?
3) Si hay algun hilo libre lo activa, pero, cómo???

Hilos:

1) Permanece bloqueado hasta que llega un cliente
2) se atienden los comandos del cliente hasta que inserta el comando Bye,
3) después del Bye, se queda libre y dispuesto para atender a otro cliente.

No termino de ver clara la implementación, así que si alguien ha hecho algo parecido, o conoce algún ejemplo de un programa parecido en el que pueda fijarme para entenderlo le agradeceria que me echara un cable.

Un saludo

Avatar de Usuario
eagleoneraptor
Mensajes: 187
Registrado: 20/05/2008 10:24 am
Ubicación: Buenos Aires(Argentina)

#2 Mensaje por eagleoneraptor » 22/06/2009 4:39 pm

Lo que tenes que tener en cuenta primero es el de aceptar N+1 conexiones, N es la cantidad de conexiones que usaran el shell y el restante lo que tendria que hacer es devolver una notificación de que el servidor esta ocupado y cerrar la conexión inmediatamente.

Los pasos, a groso modo serían así:
1) Aceptar una conexión con socket de escucha.
2) Conexión establecida, buscar si hay un hilo libre (lo puedes verificar usando una variable compartida que indique si el hilo esta corriendo o no, o no se si los hilos que usas proporcionan algun mecanismo), tenes 2 posibilidades:
  • · Hay un hilo libre, se pasa la conexión como parametro al hilo (o lo que fuera que necesites pasar)
  • · No hay un hilo libre, se devuelve la notificación (en el mismo hilo, no en otro) de "Servidor lleno" y se cierra la conexión.
3) Aceptar nueva conexión.

Con este mecanismo siempre tendras una conexión libre para la notificación de servidor agotado.

En el hilo, cuando recibas 'bye' deberas indicar de alguna forma al programa principal que ese hilo esta libre y cerrar la conexión.


Es lo que a mi se me ocurre, prueba si te va bien.
Un Saludo!
"Aquel que hace una bestia de si mismo se libra del dolor de ser un hombre". Dr. Johnson

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado