Otra forma de estudiar las posibilidades de emplear
los hilos es pensar en términos de modelos de programación.
La programación multihilo es especialmente útil
en algunos modelos de programación.
Los hilos se pueden organizar de distintas formas
para que cooperen entre sí en la resolución de un
problema. Existen una serie de modelos típicos de organización
de los hilos de un proceso. Veamos cada modelo aplicado al ejemplo
del servidor de archivos:
- Modelo servidor/trabajador :
En este modelo un hilo funciona como supervisor asignando tareas
a los hilos trabajadores. Después de que el trabajador
ha finalizado su tarea, lo indica al supervisor o es el supervisor
quien lo comprueba por sí mismo, para después recibir
una nueva tarea. Es el modelo empleado en el primer ejemplo del
servidor de archivos. Un hilo servidor que obtiene las solicitudes
y las redirige a los hilos trabajadores, que realizan el servicio.
Figura 3-4 Modelo servidor/trabajador.
- Modelo de cola de trabajo :
Este modelo es una variante del modelo servidor/trabajador. En
este modelo las tareas son colocadas por el servidor o supervisor
en una cola que es accedida por los trabajadores hasta que se
vacía.
Figura 3-5 Modelo de cola de trabajo.
- Modelo de equipo :
En este modelo múltiples hilos trabajan juntos en una tarea
simple. Cada hilo realiza una parte de la tarea, como una casa
en la que cada pintor pinta una parte de la misma. Todos los hilos
son iguales, y cada uno obtiene y procesa sus propias solicitudes.
No existe un hilo servidor. Se puede asociar una cola de trabajo
a cada tipo de solicitud, de tal forma que existan tantas categorías
de hilos como tipos de solicitud. Un hilo sólo dará
servicio a un tipo de solicitud, teniendo preferencia las solicitudes
en espera en la cola correspondiente frente a las solicitudes
del buzón del sistema.
Figura 3-6 Modelo de equipo.
- Modelo de tubería o entubamiento o
pipelining : En este modelo se emplea
el esquema de una cadena de montaje, con cada hilo realizando
un determinado paso en la tarea. Tan pronto como un hilo termina
un paso de la tarea, otro hilo trabaja en ella. Cuando un hilo
termina un paso, puede empezar a trabajar en el mismo paso de
otra tarea. En este modelo los hilos trabajan de forma encadenada.
El primer hilo genera ciertos datos, y los transfiere al siguiente
hilo que realizará cierto procesamiento sobre los mismos,
y generará nuevos datos de salida. El proceso se puede
repetir con más hilos encadenados. Los datos pasan de un
hilo a otro, y en cada paso sufren cierto procesamiento. Esta
solución puede ser apropiada en algunos problemas como
el del productor-consumidor o en las líneas de comandos
de UNIX, aunque no parece adecuado para el problema del servidor
de archivos.
Figura 3-7 Modelo de tubería.
- Combinación de modelos :
En este caso se emplea una mezcla con más de un modelo.