PATRON DE DISEÑO PIPELINE
NOMBRE: Pipeline.
INTENCION:
Pipeline (Tuberías) es
un término que pertenece a la ingeniería de software y consiste en una
cadena de elementos de procesamiento ordenados de tal manera que la salida de
cada elemento es la entrada del siguiente elemento con almacenamiento
temporal de datos o buffering entre todos los procesos.
Un pipeline o tubería
es un conjunto de elementos procesadores de datos conectados en serie, en
donde la salida de un elemento es la entrada del siguiente. Los elementos del
pipeline son generalmente ejecutados en paralelo, en esos casos, debe haber un
almacenamiento tipo buffer insertado entre elementos.
Esta arquitectura es
muy común en el desarrollo de programas para el intérprete, ya que se puede
conectar por comandos fácilmente con tuberías (pipe). También es común verlos
en sistemas operativos multitarea ya que ejecutan una serie de procesos de
manera simultaneas, los cuales son ejecutados de manera secuencial mediante un
administrador de tareas dándoles diferente prioridad de procesamiento,
alternando entre este sistema “pipeline” y los demás.
ALIAS: Tubería.
APLICAVILIDAD:
PIPELINE GRAFICOS: se encuentran en la
mayoría de las tarjetas graficadoras y consiste en múltiples unidades
aritméticas o CPUs completas que implementan variados escenarios de
operaciones típicas, por ejemplo cálculos de luz y colores renderizado
proyección de perspectiva entre otros.
Ejemplo:
·
Cálculos de luz y colores
·
Renderizado
·
Proyección de perspectiva, etc.
PIPELINE SOFTWARE: Consiste en múltiples
procesos ordenados de tal forma que el flujo de salida de un procesado alimenta
la entrada del siguiente proceso. Por ejemplo:
·
Pipelines de Unix.
IMPLEMENTACION TIPO UNIX:
En la mayoría de los sistemas tipo Unix, los procesos de este sistema se
inician al mismo tiempo, con sus corrientes conectados bien planeados, y
gestionado por el planificador junto con todos los demás procesos que se
ejecutan en la máquina.
Un aspecto importante de este sistema, además de las implementaciones, es
el concepto de almacenamiento en búfer: por ejemplo, un programa que envía
datos puede producir 5.000 bytes por segundo, y un programa de recepción sólo
puede ser capaz de aceptar 100 bytes por segundo, pero los datos no se pierden.
Cuando el programa de
recepción está listo para leer los datos, el sistema operativo envía sus datos
de la cola, a continuación, elimina los datos de la cola. Si el buffer de la
cola se llena, el programa de envío se suspende (se bloquea) hasta que el
programa de recepción ha tenido la oportunidad de leer algunos datos y hacer
espacio en el búfer. En Linux, el tamaño del búfer es de 65536 bytes.
ESTRUCTURA
Ilustración 1Diagrama de
Clases Pipeline.
Ilustración 2 Flujo de
Datos de la Tuberia.
CONSECUENCIAS:
Positivas:
ü
Permite comprender el comportamiento de entrada /salida de un sistema como
la composición del
comportamiento de los filtros individuales.
ü
Facilita el mantenimiento y crecimiento.
ü
Permiten realizar análisis de ‘deadlock’ y rendimiento.
ü
Soporte de ejecución concurrente.
ü
Facilita la reutilización de transformaciones.
ü
Es intuitivo Fácil agregar / quitar transformaciones Relativamente sencillo
de implementar, a nivel
concurrente o secuencial.
Negativas:
ü
Frecuentemente tienden a una organización de procesamiento batch.
ü
No son buenos para aplicaciones interactivas.
ü
Pueden complicarse al tener que mantener dos flujos separados pero
relacionados.
ü
Puede ser necesario agregar a los filtros conversión de datos de entrada y
salida.
ü
Pérdida de performance e incremento de complejidad delos filtros.
ü
Es difícil soportar interacciones basadas en eventos.
CÓDIGO:
Link de diferentes ejemplos
del patrón pipeline:
REFERENCIAS BIBLIOGRÁFICAS: