TAREA NO.5 1.-Diferencia entre Programación Secuencial y Programación Concurrente. La programación secuencial está basada en construcción de código a través de invocar a funciones, lo que significa que a mayor complejidad y procesos a resolver por el programa, el código fuente va creciendo, aparta que la ejecución del programa se realiza con una instrucción o subrutina que se ejecuta una tras otra. La programación concurrente es la simultaneidad en la ejecución de múltiples tareas interactivas. Estas tareas pueden ser un conjunto de procesos o hilos de ejecución creados por un único programa. Las tareas se pueden ejecutar en una sola unidad central de proceso (multiprogramación), en varios procesadores o en una red de computadores distribuidos. La programación concurrente está relacionada con la programación paralela, pero enfatiza más la interacción entre tareas. Así, la correcta secuencia de interacciones o comunicaciones entre los procesos y el acceso coordinado de recursos que se comparten por todos los procesos o tareas son las claves de esta disciplina. 2.-Este término es utilizado en programación concurrente, utilizado para indicar un programa único en el que puede haber más de un contexto de ejecución activo simultáneamente. Un hilo de ejecución, hebra o subproceso. 3.-Mencione los 5 estados de una hebra En ejecución, listo, bloqueado. 4.-Explica el termino de condición de competencia aplicable a una hebra. Una condición de competencia es un fenómeno que se produce cuando uno o varios procesos compiten por uno o varios recursos produciendo el bloqueo en la ejecución de esos procesos, lo que a la postre termina con el cuelgue del sistema. 5.-Explica como funcionaria el termino de exclusión mutua para un hilo Se usa en programación concurrente para evitar que fragmentos de código conocidos como secciones críticas accedan al mismo tiempo a recursos que no deben ser compartidos. La técnica que se emplea por lo común para conseguir la exclusión mutua es inhabilitar las interrupciones durante el conjunto de instrucciones más pequeño que impedirá la corrupción de la estructura compartida (la sección crítica). Esto impide que el código de la interrupción se ejecute en mitad de la sección crítica. 6.-Menciona cuales son las características de los procesos concurrentes. 1. Indeterminismo: Las acciones que se especifican en un programa secuencial tienen un orden total, pero en un programa concurrente el orden es parcial, ya que existe una incertidumbre sobre el orden exacto de ocurrencia de ciertos sucesos, esto es, existe un indeterminismo en la ejecucion. De esta forma si se ejecuta un programa concurrente varias veces pude producir resultados diferentes partiendo de los mismos datos. 2. Interaccion entre procesos: Los programas concurrentes implican interaccion entre los distintos procesos que los componen: - Los procesoso que comparten recursos y compiten por el acceso a los mismos. - Los procesos que se comunican entre si para intercambiar datos. 1. 1. Gestion de recursos: Los recursos compartidos necesitan una gestion especial. Un proceso que desee utilizar un recurso compartido debe solicitar dicho recurso, esperar a adquirirlo, utilizarlo y despues liberarlo. Si el proceso solicita el recurso pero no puede adquirirlo en ese momento, es suspendido hasta que el recurso este disponible. La gestion de recursos compartidos es problematica y se debe realizar de tal forma que se eviten situaciones de retraso indefinido ( espera indefinidamente por un recurso) y de deadlock (bloqueo indefinido o abrazo mortal). 2. 2. Comunicacion: La comunicacion entre procesos puede ser sincrona, cuando los procesos necesitan sincronizarse para intercambiar los datos, o asincrona, cuando un proceso que suministra los datos no necesita esperar a que el proceso receptor los recoja, ya que los deja en un buffer de comunicacion temporal. 7.- ¿Cuáles son los métodos que se utilizan en java para controlar los estados de una hebra? El método run. Antes que nada, necesitamos proveer a cada hilo con un método run para indicarle qué debe hacer. El código de este método implementa el comportamiento en ejecución del hilo y puede hacer, prácticamente cualquier cosa capaz de ser codificada en Java. Existen dos técnicas para proveer un método run para un hilo: Haciendo una subclase de Thread y sobrecargando run Implementando la interface Runnable. Aquí cabe mencionar, que el autor del libro de texto (Jim Farley) incurre en un error al mencionar que Java provee dos clases para soportar hilos (página 84, segundo párrafo); ya que Thread es una clase, pero Runnable es una interface. Tenemos buenas razones para utilizar cada una de estas técnicas. Sin embargo, a manera de regla empírica: ``Si las clases que elaboras deben ser subclases de otras clases (un caso común es Applet), entonces debe usarse Runnable.'' 8.-Menciona los conceptos thread, yield, sleep, start, run, stop, suspend, resume, runnable. THREAD: (Hilo) Es un flujo de ejecución secuencial dentro de un proceso. YIELD: (Producir, ceder, rendimiento) Hace que el intérprete detenga temporalmente la ejecución del objeto del hilo y permita que el siguiente hilo disponible se ejecute. SLEEP: (Dormir) Provoca que el intérprete de Java ponga la tarea a dormir durante un tiempo indicado en milisegundos, transcurrido dicho tiempo la tarea estará disponible para ejecución. START: (Empezar) Le indica al intérprete de Java que cree un contexto de ejecución de una tarea e inicie su ejecución. Acto seguido se invoca el método run() de esta tarea en el nuevo contexto de ejecución. Debe tenerse cuidado de llamar a start() no más de una vez para una tarea determinada. RUN: (Correr) Constituye el cuerpo de una tarea o hilo. Es llamado por el método start(), despues que la tarea apropiada del sistema se haya inicializado. La tarea actual se detendrá cada vez que run() devuelva el control. Este es el único método de la interfaz Runnable. STOP: (Parar) Hace que el hilo termine su ejecución. SUSPEND: (Suspender) Hace que el hilo interrumpa temporalmente su ejecución. RESUME: (Reanudar) Se usa para recomenzar un hilo que está suspendido. RUNNABLE: (Ejecutable) Es un ejemplo de interface en el cual se declara, pero no se implemementa, una función miembro run.