Está en la página 1de 7

Arquitectura y Patrones de diseo

Arquitectura cliente-servidor. En esta aproximacin, el sistema puede ser visto como un


conjunto de servicio que se proporcionan a los clientes que hacen uso de dichos servicios.
Los servidores y los clientes se tratan de forma diferente en estos sistemas.
Arquitecturas de objetos distribuidos. En este caso, no hay distincin entre servidores y
clientes, y el sistema puede ser visto como un conjunto de objetos que interaccionan cuya
localizacin es irrelevante. No hay distincin entre un proveedor de servicios y el usuario
de estos servicios.
Ambas arquitecturas se usan ampliamente en la industria, pero la distribucin de las
aplicaciones generalmente tiene lugar dentro de una nica organizacin. La distribucin
soportada es, por lo tanto, intra organizacional. Aqu tambin se plantean dos tipos ms
de arquitecturas distribuidas que son ms adecuadas para la distribucin inter
organizacional: arquitectura de sistemas peer-to-peer (p2p) y arquitecturas orientadas a
servicios.

Tipos de patrones
- Adaptador: Adapta la interfaz de una clase a lainterfaz esperada por sus clientes,
favorece lareutilizacin (de la clase adaptada) y permite lacolaboracin con
interfaces incompatibles. Tambinse conoce como Wrapper.

- Decorador: Permite aadir responsabilidadesadicionales a un objeto de forma


dinmica. Losdecoradores proporcionan una alternativa flexible a
lasubclasificacin para aadir funcionalidad.
- Estado: Es un patrn de comportamiento paraobjetos. Se debe usar si el
comportamiento de unobjetodepende de su estado, y se ve modificado entiempo
de ejecucin. Permite que un objeto cambiesu comportamiento cuando cambia
su estado interno,tal y como si el objeto cambiase de clase.

Para que sirven?

- Los patrones de diseo son la base para la bsqueda de soluciones a


problemas comunes en el desarrollo de software y otros mbitos referentes al
diseo de interaccin o interfaces.
- Un patrn de diseo es una solucin a un problema de diseo. Para que una
solucin sea considerada un patrn debe poseer ciertas caractersticas. Una
de ellas se resuelva problemas similares de manera efectiva. Otra
caracterstica es que debe ser reutilizable
- Proporciona un esquema para refinar los subsistemas o componentes de un
sistema software, o las relaciones entre ellos.
Ventajas y Desventajas

Ventajas:

- Permiten reutilizar soluciones de problemas comunes.


- Estn probados y son lo suficientemente flexibles para adaptarse.

Desventajas:

- Su elevado nmero (falta de catalogacin).


- Su complejidad.
- Poca definicin.

ESTRATEGIAS DE EJECUCION DELAS TAREAS

Hay diferentes estrategias para ejecutar las tareas que constituyen un programa:

1. Ejecucin secuencial de las tareas


Ofrecen bajo throughput y tiempo de respuesta.
2. Creacin explcita de un thread por cada tarea.
La ejecucin concurrente de las tareas mejora el uso de los recursos
Cuando las tareas son muy breves, la creacin/destruccin de thread
supone una sobre carga relevante.
Con baja carga tiene buena respuesta. Con alta carga tiene peligro de fallo
por agotamiento de los recursos.
3. Creacin de un grupo de thread (pool) para posteriormente aplicarlos
Se elimina la sobrecarga de creacin y destruccin de thread.
Se limita la cantidad de recursos que se acaparan.
Se consigue la estabilidad con alta carga.

EXECUTOR FRAMEWORK.

Executor es la base de un framework flexible y potente de ejecucin asncrona de tareas


que independiza la definicin de las tareas como unidades lgicas de trabajo y los
threads como los mecanismos con los que las tareas se ejecutan concurrentemente y
asncronamente.

Tiene como objeto diferenciar la interfaz java.util.concurrent.Executor:

public interface Executor{

void execute(Runnable command);

Flexibiliza el mantenimiento de programas concurrentes a lo largo de su ciclo de vida,


posibilitando el cambio de las polticas de ejecucin sin cambiar el cdigo de la propia
ejecucin.
IMPLEMENTACIN DE EJECUTORES.

import java.util.concurrent.*;

public class ThreadPerTaskExecutor implements Executor{

public void execute(Runnable r){

new Thread(r).start();

import java.util.concurrent.*;

public class OneThreadExecutor implements Executor{

public void execute(Runnable r){

r.run();

POLTICAS DE EJECUCIN.

La utilidad de usar el framework Executor es poder modificar la poltica de ejecucin de


un conjunto de tareas con slo el cambio mnimo de declarar un tipo de ejecutor
diferente declarar un tipo de ejecutor diferente

Una poltica de ejecucin incluye:

Definir en que thread se ejecutan las tareas.


Definir el orden en el que se ejecutan las tareas (FIFO,LIFO, Por Prioridad, etc.
El nmero de tareas que se permiten ejecutar concurrentemente.
El nmero de tareas que pueden encolarse en espera de ejecucin.
eleccin de la tarea que debe ser rechazada si hay sobrecarga.
Definir las acciones que deben ejecutarse antes y despus de ejecutarse una tarea

La poltica de ejecucin de tareas en una herramienta de gestin de recursos, y la ptima


en cada caso depende de los recursos disponibles y de la calidad de servicio (throughput
)que se requiere para la ejecucin.

THREAD POOLS
Un thread pool es una estructura que gestiona un conjunto homogneo de threads
dispuestos a ejecutar la tarea que se les encargue a travs de una cola de trabajos.

El ciclo de vida de un thread de un thread pool es muy simple:

Espera en la cola de trabajo un nuevo trabajo.


Los ejecuta
Retorna a la cola a esperar el siguiente

Ejecutar tareas a travs de un pool de threads tiene ventajas:

Reutilizar Thread ya creados implica ahorrase la actividades de creacin y


destruccin de nuevas tareas
Disminuye el tiempo de respuesta, ya que las tareas estn creadas cuando llega
el requerimiento de ejecucin del trabajo.
Regulando la dimensin del pool se puede equilibrar la carga con los recursos de
CPU y memoria que se requieren.

CLASE THREADPOOLEXECUTOR.

Las instancias Java de thread pool se declaran con la clase java.util.concurrent.


ThreadPoolExecutor que implementa ExecutorService (extends Executor):

class ThreadPoolExecutor implements ExecutorService(

int corePoolSize, // Nmero base de thread que se crean en el pool

int maximumPoolSize, // Nmero mximo de threads que se pueden


crear en el
pool

long keepAliveTime, TimeUnit unit, // Tiempo en el que los thread que


hay en

// exceso respecto de corePoolSize se destruyen

BlockingQueue workQueue, //Tipo de cola de tareas del pool


ThreadFactory

threadFactory, //Define la poltica con las que se crean los thread

// dinmicamente (Prioridad, Grupo,


naturaleza)

RejectedExecutionHandler handler) // Define la poltica con la que se


descartan las

// tareas cuya ejecucin es rechazada, Bien por


el
proceso de shutdown

// o por que la cola de tareas es acotada.

EJECUTORES DEFINIDOS EN LAS LIBRERAS JAVA.

En java.util.concurrent.executors hay cuatro factories que generan intancias


concretas que implementan Executor y ofrecen polticas de ejecucin diferentes:

newFixedRhreadPool(int nThreads ) => Genera un pool de threads con un


nmero de elementos constantes. Si alguno de ellos muere es sustituido por
otro.
newCachedThreadPool() => Genera un pool un nmero base de threads.
Este nmero se incrementa si la carga de trabajo del thread crece.
newSingleThreadExecutor() => crea un nico thread que ejecuta
secuencialmente las tareas que se le encominedan. Si el thread muere es
sustituido por otro.
newScheduledThreadPool(int nThread) =>Crea un pool de threads con un
nmero de elemento prejijado. Los threads ofrecen la interfaz
ScheduledExecutorService con la que se puede planificar la ejecucin
periodica de los threads.

Ciclo de vida de los Executors.

La interfaz ExecutorService que extiende Executor ofrece diferentes servicios para


controlar el ciclo de vida de los threads del pool:

Un thread pool sigue un ciclo de vida con tres estados:

running: Estado en que se encuentra cuando se crea un thread pool. Admite


trabajos y cuando tiene thread disponibles los ejecuta.
shutting down: Estado de finalizacn gradual. No se acepta nuevas tareas, pero
aquellas que haban sido ordenadas (aunque no se hayan iniciado su ejecucin)
se ejecutan.
terminated: Finalizacin abrupta. Trata de finalizar las tareas en ejecucin, y ni
admite nuevas tareas, ni comienza la ejecucin de tareas ordenadas.

Tarea con resultados demorados

No puede retornar valores.


No puede lanzar excepciones.

Muchas tareas representan segmentos de computacin aplazada que deben ser


verificados posteriormente cuando terminen. Para estos casos la abstraccin Callable es
ms adecuada.
La tarea que las lanza obtiene informacin en la invocacin de forma que, ms adelante
puede obtener los resultados y el estado de la tarea.

Future es una clase cuyas instancias representan el estado de una tarea a lo largo de su
ciclo de vida, y a travs de ella una tarea puede retornar los resultados, conocer su
estado o ser gestionada.

También podría gustarte