Вы находитесь на странице: 1из 4

HILOS DE EJECUCIN

En sistemas operativos, un hilo de ejecucin o subproceso es una caracterstica que permite a una aplicacin realizar varias tareas a la vez (concurrentemente). Los distintos hilos de ejecucin comparten una serie de recursos tales como el espacio de memoria, los archivos abiertos, situacin de autenticacin, etc. Esta tcnica permite simplificar el diseo de una aplicacin que debe llevar a cabo distintas funciones simultneamente. Un hilo es bsicamente una tarea que puede ser ejecutada en paralelo con otra tarea. Los hilos de ejecucin que comparten los mismos recursos, sumados a estos recursos, son en conjunto conocidos como un proceso. El hecho de que los hilos de ejecucin de un mismo proceso compartan los recursos hace que cualquiera de estos hilos pueda modificar stos. Cuando un hilo modifica un dato en la memoria, los otros hilos acceden a ese dato modificado inmediatamente. Algunos lenguajes de programacin tienen caractersticas de diseo expresamente creadas para permitir a los programadores lidiar con hilos de ejecucin (como Java o Delphi). Otros (la mayora) desconocen la existencia de hilos de ejecucin y stos deben ser creados mediante llamadas de biblioteca especiales que dependen del sistema operativo en el que estos lenguajes estn siendo utilizados (como es el caso del C y del C++).

DIFERENCIAS ENTRE HILOS Y PROCESOS

Los hilos se distinguen de los tradicionales procesos en que los procesos son generalmente independientes, llevan bastante informacin de estados, e interactan slo a travs de mecanismos de comunicacin dados por el sistema. Por otra parte, muchos hilos generalmente comparten otros recursos de forma directa. En muchos de los sistemas operativos que dan facilidades a los hilos, es ms rpido cambiar de un hilo a otro dentro del mismo proceso, que cambiar de un proceso a otro.

FUNCIONALIDAD DE LOS HILOS

Al igual que los procesos, los hilos poseen un estado de ejecucin y pueden sincronizarse entre ellos para evitar problemas de compartimiento de recursos. Generalmente, cada hilo tiene una tarea especfica y determinada, como forma de aumentar la eficiencia del uso del procesador. Estados de un hilo: Los principales estados de los hilos son: Ejecucin, Listo y Bloqueado. No tiene sentido asociar estados de suspensin de hilos ya que es un concepto de proceso. En todo caso, si un proceso est expulsado de la memoria principal (ram), todos sus hilos debern estarlo ya que todos comparten el espacio de direcciones del proceso.
1

Cambios de estado: -Creacin: Cuando se crea un proceso se crea un hilo para ese proceso. Luego, este hilo puede crear otros hilos dentro del mismo proceso, proporcionando un puntero de instruccin y los argumentos del nuevo hilo. El hilo tendr su propio contexto y su propio espacio de la columna, y pasara a la final de los listos. -Bloqueo: Cuando un hilo necesita esperar por un suceso, se bloquea (salvando sus registros de usuario, contador de programa y punteros de pila). Ahora el procesador podr pasar a ejecutar otro hilo que est en la final de los Listos mientras el anterior permanece bloqueado. -Desbloqueo: Cuando el suceso por el que el hilo se bloque se produce, el mismo pasa a la final de los Listos. -Terminacin: Cuando un hilo finaliza se liberan tanto su contexto como sus columnas.

VENTAJAS DE LOS HILOS FRENTE A LOS PROCESOS

Si bien los hilos son generados a partir de la creacin de un proceso, podemos decir que un proceso es un hilo de ejecucin, conocido como Monohilo. Pero las ventajas de los hilos se dan cuando hablamos de Multihilos, que es cuando un proceso tiene mltiples hilos de ejecucin los cuales realizan actividades distintas, que pueden o no ser cooperativas entre s. Los beneficios de los hilos se derivan de las implicaciones de rendimiento. 1. Se tarda mucho menos tiempo en crear un hilo nuevo en un proceso existente que en crear un proceso. Algunas investigaciones llevan al resultado que esto es as en un factor de 10. 2. Se tarda mucho menos en terminar un hilo que un proceso, ya que cuando se elimina un proceso se debe eliminar el BCP del mismo, mientras que un hilo se elimina su contexto y pila. 3. Se tarda mucho menos tiempo en cambiar entre dos hilos de un mismo proceso. 4. Los hilos aumentan la eficiencia de la comunicacin entre programas en ejecucin. En la mayora de los sistemas en la comunicacin entre procesos debe intervenir el ncleo para ofrecer proteccin de los recursos y realizar la comunicacin misma. En cambio, entre hilos pueden comunicarse entre s sin la invocacin al ncleo. Por lo tanto, si hay una aplicacin que debe implementarse como un conjunto de unidades de ejecucin relacionadas, es ms eficiente hacerlo con una coleccin de hilos que con una coleccin de procesos separados.

HILOS EN JAVA

A veces necesitamos que nuestro programa Java realice varias cosas simultneamente. Otras veces tiene que realizar una tarea muy pesada. Para conseguir que Java haga varias cosas a la vez o que el programa no se quede parado mientras realiza una tarea compleja, tenemos los hilos (Threads). Crear un Hilo

Crear un hilo en Java es una tarea muy sencilla. Basta heredar de la clase Thread y definir el mtodo run(). Luego se instancia esta clase y se llama al mtodo start() para que arranque el hilo. Ms o menos esto

public class Hilos1 extends Thread { public void run(){ } }

Hemos creado una clase Hilos1 que hereda de Thread y con un mtodo run(). En el mtodo run() pondremos el cdigo que queremos que se ejecute en un hilo separado. Luego instanciamos en el principal tres hilos con new Hilos1( ) y lo arrancamos con nombreHilo.start(). El System.out que hay detrs se ejecutar inmediatamente despus del start(), haya terminado o no el cdigo del hilo.

public class Hilos1 extends Thread { private String nombre; private int retardo; public Hilos1(String s, int d){ nombre = s; retardo = d; } public void run(){ try{ sleep(retardo); }catch(InterruptedException e){ ; } System.out.println("Hola " + nombre + " " + retardo ); } }

public class Principal1 { public static void main(String[] args) { Hilos1 t1, t2, t3; // t1 t2 t3 Creamos los threads = new Hilos1( "Thread 1",1000 ); = new Hilos1( "Thread 2",5000 ); = new Hilos1( "Thread 3",10000 );

t1.start(); t2.start(); t3.start(); } }