4.2 Comparacion de un Programa de Flujo Unico Contra uno de Flujo Multiple
4.2 COMPARACIÓN DE UN PROGRAMA DE FLUJO ÚNICO CONTRA UNO DE FLUJO MÚLTIPLE
|
Programas De Flujo Único
Un programa de flujo único, tarea única o mono -hilo (single-thread) utiliza un único flujo de control (thread) para controlar su ejecución. Muchos programas no necesitan la potencia o utilidad de multiples tareas. sin necesidad para especificar explicitamente que se quiere un único flujo de control, muchos de los applets y aplicaciones son de flujo único.
Por ejemplo, en la aplicación estádar de saludo para aprender cualquier lenguaje de programación:
public class HolaMundo{
public static void main (string args[]){
System.out.println( " Hola Mundo " );
}
}
Aqui, Cuando se llama al main(), la aplicación imprime el mensaje y termina. Esto ocurre dentro de una única tarea (thread).
Debido aque la mayor parte de los entornos operativos no solían ofrecer un soporte razonable para múltiples tarea, los leguajes de programación tradicionales, tales como c++, no incorporaron mecanimos para describir de manera elegante situaciones de este tipo. La sincronización entre las múltiples partes de un programa se lleba a cabo a medida de un bucle de sucecion único. Estos entornos son de tipo síncrono, gestionados por sucesos. Entornos tales como el de MacOs de Apple,Windows de Microsft y X11/Motif fueron diseñados al entorno del bucle del suceso.
PROGRAMAS DE FLUJO MÚLTIPLE
En la aplicación de Saludo, no se ve la tarea que está ejecutando el programa. Sin embargo, java posibilita la creación de tareas explícitamente. La utilización de las tareas (threads) en java permite una enorme flexibilidad a los programadores a la hora de plantearse el desarrollo de aplicaciones. La simplicidad para crear, configurar y ejecutar tareas permite que se puedan implementar muy poderosas y portables aplicaciones/applets que no se pueden crear con lenguajes de tercera generación. En un lenguaje orientado a Internet como es Java, esta herramienta es vital.
Si el lector a utilizado un navegador con soporte en Java, ya habrá visto el uso de múltiples tareas en Java. Habrá observado que dos applets se pueden ejecutar al mismo tiempo, o bien que puede desplazar la página del navegador mientras el applet continúa ejecutándose. Esto no significa que el applet utilice múltiples tareas, sino que el navegador es multitareas, multihilo, multihilvanado o multithreaded.
Los navegadores utilizan diferentes tareas ejecutándose en paralelo para realizar varias tareas, “aparentemente" de forma concurrente. Por ejemplo, en muchas páginas Web se puede desplazar la página e ir leyendo el texto antes de que todas la imágenes estén presentes en la pantalla. En este caso, el navegador está descargando las imágenes en una tarea y soportando el desplazamiento de la página en otra tarea diferente.
Las aplicaciones (y applets) multitarea utiliza muchos contextos de ejecución para cumplir su trabajo. Se aprovecha del hecho de que muchas tareas contienen subtareas distintas e independientes. Se puede utilizar un hilo de ejecución para cada subtarea.
Mientras que los programas de flujo único pueden realizar su tarea ejecutando las subtareas secuencialmente, un programa multitarea permite que cada tarea comience y termine tan pronto como sea posible. Este comportamiento presenta una mejor respuesta a la entrada en tiempo real.
A continuación, se va a modificar el programa de saludo creando tres tareas individuales, que imprimen cada una de ellas su propio mensaje de saludo:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
class TestTh extends Thread {
private String nombre; private int retardo;
// Constructor para almacenar nuestro nombre y el retraso
public TestTh( String s,int d) {
nombre = s;
retardo = d;
}
//El método run() es similar al main(), pero para threads. Cuando
// run() termina el thread muere
public void run( ) {
// Retrasamos la ejecución el tiempo especificado
try {
sleep( retardo );
} catch( InterruptedException e ) {
;
}
// Ahora imprimimos el nombre
System.out.println(" Hola Mundo! " +nombre+ " " +retardo );
}
}
public class MultiHola{
public static void main (String args[ ] ) {
TestTh t1,t2,t3;
//Creamos los threads
t1 = new TestTh(" Thread 1", (int)(Math.random()*2000) );
t2 = new TestTh("Thread 2",(int)(Math.random()*2000) );
t3 = new TestTh("Thread 3",(int)(Math.random()*2000));
//Arrancamos las threads
t1.start();
t2.start();
t3.start();
}
}
Comentarios
Publicar un comentario