Tema III. Multihilo. Desarrollo de Aplicaciones para Internet Curso 12 13

Documentos relacionados
Aplicaciones Concurrentes

de Gran Canaria Centro de Tecnología Médica Programación Concurrente

Programación Concurrente en Java: Threads. Ejemplos de programación concurrente. Luis Fernando Llana Díaz. 24 de abril de 2008

Normalmente, los programas son ejecutados de forma secuencial. Único flujo de control

Concurrencia y paralelismo

Diagramas De Casos De Uso

Unidad 8. Bases de Datos en el Modelo Cliente Servidor

Conexiones dedicadas y compartidas: pool de conexiones.

Threads, SMP y Microkernels. Proceso

Tema 2 Introducción a la Programación en C.

Sistemas Distribuidos. Soporte de Sistemas Operativos

Cuando el lenguaje si importa

Desarrollador de Aplicaciones Web con Java

1 HILOS (THREADS) EN JAVA

Ombú / Wbs (Web based Systems)

TEMA 3. CONCEPTOS FUNDAMENTALES DEL NIVEL DEL SISTEMA OPERATIVO. Definición y objetivos de un S.O

INGENIERÍA DEL SOFTWARE I Práctica 5 Modelado de Diseño

Hilos. Índice. Copyright Dept. Ciencia de la Computación e IA All rights reserved.

POSGRADO EN DESARROLLO DE APLICACIONES PARA ANDROID CON JAVA

HP - UX. Qué es HP UX?

20483 Programación en C#

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A.

CAPITULO 6. Control de Concurrencia y Recuperación

Sockets. Los sockets son un mecanismo de comunicación entre procesos que se utiliza en Internet.

Herramientas Concurrentes en JAVA

INSTITUTO DE EDUCACIÓN SUPERIOR TECNOLÓGICO IBEROTEC SEMESTRE ACADÉMICO: 2014-II SÍLABO

Qué es un programa informático?

Introducción a los Sistemas Operativos

(THREADS) Ing. Laura Sandoval Montaño, Ing. Manuel Enrique Castañeda Castañeda PAPIME

Concurrencia en Android LSUB, GYSC, URJC

Procesos. Bibliografía. Threads y procesos. Definiciones

Diseño arquitectónico 1ª edición (2002)

Tecnología de software para sistemas de tiempo real

Herramientas Informáticas I Software: Sistemas Operativos

Inteligencia en Redes de Comunicaciones - 08 Agentes

Federico Peinado

Elementos Diagramas de Clases Clase:

Programación Orientada a Eventos

Clasificación n de los Sistemas Operativos. Clasificación de los SO Estructuras de los SO Modos de procesamiento

Sistemas Operativos Tema 5. Procesos José Miguel Santos Alexis Quesada Francisco Santana

Soluciones BYOD para el aula. 24.Febrero.2016

Lenguaje de programación con JAVA

Concurrencia en Java

Sistema electrónico digital (binario) que procesa datos siguiendo unas instrucciones almacenadas en su memoria

Universidad de Carabobo Facultad Experimental de Ciencias y Tecnología Departamento de Computación Informe final de pasantía

Tema 1: Patrones Arquitectónicos

Caso práctico Red de telefonía móvil

GRADO EN INGENIERÍA INFORMÁTICA

Ubuntu Server HOW TO : SERVIDOR DE IMPRESORAS

Diagramas de secuencia

Contenido. 1. El proceso 2. Los modelos 3. Los diagramas 4. Ejemplo

Sistemas Distribuidos: Migración de Procesos

Nombre de la asignatura : Sistemas de Computación Código : Nivel (semestre de la carrera) : 7 : Ingeniería Civil Informática Nº de créditos : 4

Estilos Arquitectónicos

Programación Orientada a Objetos en Java

Sistemas Operativos. Dr. Luis Gerardo de la Fraga. Departamento de Computación Cinvestav

Estilos Arquitectónicos

Sockets en Java. La Creatividad proviene de un conflicto de ideas. Uso de Sockets

TEMA 5: Control de la Concurrencia en Java (API Estándar)

Arquitecturas de Bases de Datos. Carlos A. Olarte BDII

COMUNICACIÓN ENTRE EL CLIENTE Y SERVIDOR SIN PHP Y CON PHP. INTÉRPRETE PHP Y GESTOR DE BASES DE DATOS (CU00804B)

La funcionalidad del agente administrador es la de apoyar al administrador de BIDACI,

Paradigma de paso de mensajes

Unidad 1: Conceptos generales de Sistemas Operativos.

TEMA 3: IMPLANTACIÓN DE TÉCNICAS DE ACCESO REMOTO. Victor Martin

pytod, un prototipo experimental para realizar Depuración Omnisciente a scripts escritos en el Lenguaje de Programación Python

Programación concurrente

Threads. La plataforma JAVA soporta programas multhreading a través del lenguaje, de librerías y del sistema de ejecución. Dos.

2º CURSO INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN TEMA 5 ENTRADA/SALIDA. JOSÉ GARCÍA RODRÍGUEZ JOSÉ ANTONIO SERRA PÉREZ Tema 5.

El Modelo. Aplicación. Presentación. Sesión. Transporte. Red. Enlace. Físico

GUÍA DOCENTE Programación Concurrente y de Tiempo Real

FUNDAMENTOS DE INFORMÁTICA. Principios Básicos de Sistemas Operativos. Definición de Sistema Operativo

Pasos a seguir para crear una aplicación visual en el lenguaje de programación Java con Netbeans IDE.

Java y JVM: programación concurrente

Aspectos Básicos de Networking

UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INGENIERÍA TELEMÁTICA. Daniel Díaz Sánchez

Diseño de sistemas concurrentes

Descarga de Listas de Música Proyecto Examen Final

Usando el Sistema Operativo

PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA

Las optimizaciones pueden realizarse de diferentes formas. Las optimizaciones se realizan en base al alcance ofrecido por el compilador.

Existen diferentes recursos interactivos que han sido utilizados para la enseñanza

Ingeniería del Software I

Notas de clase. Threads

Aplicaciones de Microsoft Dynamics CRM 4.0

CURSO: APACHE SPARK CAPÍTULO 3: SPARK CONCEPTOS BÁSICOS.

Arquitectura del PLC. Dpto. Electrónica, Automática e Informática Industrial)

Premios CONTRATOS Y PROYECTOS SMART CITIES 2014

MS_10962 Advanced Automated Administration with Windows PowerShell

Capas de presentación

TEMA 37: Arquitecturas Cliente / Servidor. Tipos de cliente. Tipos de Servidor. Clasificación del software.

Modelos de programación paralela y concurrente

Conmutación de circuitos Tráfico

Tema: Clases y Objetos en C#. Parte II.

Tema: Introducción al IDE de Microsoft Visual C#.

USB232. Hoja de datos

CAPITULO 1 INTRODUCCION AL PROYECTO

Pattern Oriented Software Architecture. Whole-Part. Jamir Antonio Avila Mojica César Julio Bustacara Medina. Patrones de Software

Parte I:Teoría. Tema 3:Introducción a los Sistemas operativos. Instalación

Transcripción:

Tema III. Multihilo Desarrollo de Aplicaciones para Internet Curso 12 13

Índice 1.Introducción 2.Tipos de Concurrencia 3.Hilos en Java 4.Implementación de un SNB i. Sin Hilos ii. Con Hilos iii.con Pool de Hilos 5.Referencias

Índice 1.Introducción 2.Tipos de Concurrencia 3.Hilos en Java 4.Implementación de un SNB i. Sin Hilos ii. Con Hilos iii.con Pool de Hilos 5.Referencias

Introducción La naturaleza cliente(s)/servidor de las aplicaciones hace que necesario el uso de concurrencia El tiempo de respuesta es muy importante Usos habituales Servidores no bloqueantes (SNB) El procesado de una petición no debe esperar a que se responda a las peticiones previas Es necesario procesar las peticiones en paralelo Manejo de peticiones asíncronas Se evita el bloqueo de la aplicación que espera la respuesta a una petición remota

Índice 1.Introducción 2.Tipos de Concurrencia 3.Hilos en Java 4.Implementación de un SNB i. Sin Hilos ii. Con Hilos iii.con Pool de Hilos 5.Referencias

Tipos de concurrencia Basada en procesos Proceso: Instancia de un programa en ejecución, incluyendo los valores actuales del contador de programa, registros y variables La concurrencia se consigue creando copias de procesos (programas) Creación más lenta Espacio de memoria propio Necesita más memoria Programación más sencilla Basada en hilos (threads) Hilo: Flujo de ejecución dentro de un proceso. Es la menor unidad de procesamiento de un S.O. La concurrencia se consigue creando varios flujos de ejecución dentro de un mismo proceso (programa) Creación más rápida (10-100 veces) Espacio de memoria compartido: Menos memoria Programación más complicada Más habitual El uso de hilos en aplicaciones para Internet suele ser para desarrollar acciones independientes, por lo que no es necesaria la sincronización de los mismos

Manejo de Memoria Procesos Memoria Compartida [Opcional] Hilos Memoria del Proceso Memoria Proceso Asignada Memoria del Proceso Memoria del Proceso Proceso... Proceso Hilo... Hilo

Ciclo de Vida de un Hilo Listo En ejecución Bloqueado Finalizado

Índice 1.Introducción 2.Tipos de Concurrencia 3.Hilos en Java 4.Implementación de un SNB i. Sin Hilos ii. Con Hilos iii.con Pool de Hilos 5.Referencias

Threads en Java La clase java.lang.thread representa un hilo en Java Su ejecución debe iniciarse explícitamente mediante el método start Su comportamiento puede proporcionarse mediante clases que implementen la interfaz java.lang.runnable

Ciclo de Vida de un Thread Creado start Completar E/S despachar Listo Fin intervalo sueño wait notify notifyall Ejecución desalojar resume* Solicitud E/S sleep suspend* Vivo (Alive) Espera Bloqueado Dormido Suspendido stop* Fin Ejecución * Métodos obsoletos (evitar su uso) Muerto

Arquitectura de Memoria en Java Memoria compartida Memoria no compartida * Imagen tomada de: http://blog.codecentric.de/en/2010/01/the-java-memory-architecture-1-act/

Índice 1.Introducción 2.Tipos de Concurrencia 3.Hilos en Java 4.Implementación de un SNB i. Sin Hilos ii. Con Hilos iii.con Pool de Hilos 5.Referencias

Implementación de un SNB Vamos a ver como implementar un servidor no bloqueante en Java: Las peticiones deben procesarse en paralelo, de modo que un cliente no tenga que esperar a que finalicen las peticiones anteriores antes de que se procese la suya Partiremos del ejemplo EchoServer del tema anterior al que añadimos las clases IOManager y SocketIOManager para gestión de E/S

IOManager y SocketIOManager

EchoClient

EchoServer

EchoServer Problemas Solo se puede dar servicio a un cliente El resto de clientes deben esperar a que se dé servicio al cliente activo

Índice 1.Introducción 2.Tipos de Concurrencia 3.Hilos en Java 4.Implementación de un SNB i. Sin Hilos ii. Con Hilos iii.con Pool de Hilos 5.Referencias

EchoServer No Bloqueante Sin Hilos Evitando los bloqueos en los métodos bloqueantes podemos conseguir un SNB accept: Utilizando setsotimeout podemos limitar el tiempo de bloqueo readline: Invocando el método canread del SocketIOManager podemos saber si hay algo que leer en el flujo Solo es necesario un hilo para gestionar el servidor

EchoServer No Bloqueante Sin Hilos

EchoServer No Bloqueante Sin Hilos Al utilizar setsotimeout hacemos que el bloqueo de accept dure un máximo de 1000 ms

EchoServer No Bloqueante Sin Hilos

Ventajas EchoServer No Bloqueante Sin Hilos Se atiende a varios clientes simultáneamente Problemas Se desperdicia tiempo esperando peticiones Se desperdicia CPU al tener que estar comprobando continuamente si hay nuevos clientes o hay algo que leer

Índice 1.Introducción 2.Tipos de Concurrencia 3.Hilos en Java 4.Implementación de un SNB i. Sin Hilos ii.con Hilos iii.con Pool de Hilos 5.Referencias

EchoServer No Bloqueante Con Hilos Mediante el uso de hilos podemos evitar desperdiciar recursos en un SNB Existen dos tipos de hilo en el servidor Hilo Servidor: Un único hilo será el responsable de aceptar las conexiones de los clientes Hilos de Servicio: Cada cliente será atendido por uno o varios hilos de servicio

EchoServer No Bloqueante Con Hilos 1.El cliente solicita la conexión con el hilo servidor 2.El hilo servidor crea un hilo de servicio que atenderá al cliente 3.El cliente se comunica directamente con el hilo de servicio

EchoServer No Bloqueante Con Hilos Hilo Servidor

EchoServer No Bloqueante Con Hilos Hilo Servidor (Main)

Ventajas EchoServer No Bloqueante Con Hilos Se atiende a varios clientes simultáneamente No hay desperdicio de tiempo, puesto que el hilo principal se bloquea a la espera de peticiones mientras que los hilos ServerThread dan servicio a los clientes Problemas Puede haber problemas de rendimiento ante un alto número de conexiones

Índice 1.Introducción 2.Tipos de Concurrencia 3.Hilos en Java 4.Implementación de un SNB i. Sin Hilos ii. Con Hilos iii.con Pool de Hilos 5.Referencias

Ejecutores en Java Manejan la ejecución de un grupo de Thread Java proporciona una serie de clases en el paquete java.util.concurrent Interfaces principales Executor: Interfaz común que define un método para ejecutar Runnable ExecutorService: Añade a Executor métodos que generan objetos Future para seguir el progreso de una o más tareas asíncronas ScheduledExecutorService: Añade a ExecutorService métodos para ejecutar tareas con un determinado retraso o de forma periódica

Patrón Thread Pool

java.util.concurrent.threadpoolexecutor Implementación de la interfaz ExecutorService Mantiene un pool de Thread con los que ejecuta las tareas recibidas Si cuando se recibe una tarea hay algún Thread libre, se le asigna la tarea y se ejecuta Si no, la tarea se guarda en una cola hasta que haya un Thread libre Suele crearse a través de los métodos estáticos de la clase Executors: newfixedthreadpool y newcachedthreadpool

EchoServer No Bloqueante Thread Pool

Ventajas EchoServer No Bloqueante Thread Pool Permite controlar el número máximo de hilos creados por el sistema Evita la sobrecarga del servidor

Índice 1.Introducción 2.Tipos de Concurrencia 3.Hilos en Java 4.Implementación de un SNB i. Sin Hilos ii. Con Hilos iii.con Pool de Hilos 5.Referencias

Referencias Schmint, D., Stal, M., Rohnert, H., Buschmann. Pattern-Oriented Software Architecture Volume 2: Patterns for Concurrent and Networked Objects. John Willey & Sons (2000) Patterns for Concurrent, Parallel and Distributed Systems [ http://www.cs.wustl.edu/~schmidt/patterns-ace.html - Última Visita 07/09/2012]