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

4.

1 CONCEPTOS DE HILO

Hilo (theread) llamado tambin proceso ligero o subproceso, es
la unidad de ejecucin de un proceso y esta asociado con una
secuencia de instrucciones un conjunto de registros y una pila.
Cuando se crea un proceso el S.O crea su primer hilo (hilo
primario) en la cual puede,a su vez,crear hilos adicionales. esto
pone de manifiesto que un proceso no ejecuta,si no que es slo
el espacio de direcciones donde recide el cdigo que es
ejecutado mediante uno o ms hilos.

En un S.O tradicional. Cada proceso tiene un espacio de
direcciones y un nico hilo de control por ejemplo, considere
que un programa que incluya la siguiente secuencia de
operaciones para actualizar el saldo de una cuenta bancaria
cuando se efecta un nuevo ingreso:
Saldo=Cuenta.ObtenerSaldo ();
Saldo+=ingreso;
Cuenta.EstablecerSaldo (saldo);
Este modelo de programacin, en el que se ejecuta un solo hilo,
es en el que estamos acostumbrados a trabajar habitualmente.
Pero, siguiendo con el ejemplo anterior piensa en un banco
real; en el varios cajeros pueden actuar simultneamente.
Ejecutar el mismo programa por cada uno de los cajeros tiene
un costo elevado (recuerde los recursos que necesita). En
cambio si el programa permitiera lanzar un hilo por cada
peticin de cada cajero para actualizar una cuenta, estaramos
en el caso mltiples hilos ejecutandose concurrente mente
(multitriandi) . Esta caracterstica ya es una realidad en los S.O
modernos de hoy y como consecuencia contemplada en los
lenguajes de programacin actuales.

Cada hilo se ejecuta de forma estrictamente secuencial y tiene
su propia pila en estados de los registros de UCP y su propio
contador de un programa en cambio comparte el mismo
espacio de direcciones, lo que significa compartir tambin las
mismas variables globales, el mismo conjunto de ficheros
abiertos, procesos hijos (no hilos hijos), seales, semforos, etc.
Los hilos comparten la UCP de la misma forma que lo hacen los
procesos pueden crear hilos hijos y se pueden bloquear no
obstante mientras un hilo del mismo proceso, en el caso de
hilos soportados por el kernel (ncleo del S.O: programas en
ejecucin que hacen que el sistema funcione), no sucediendo lo
mismo con los hilos soportados por una aplicacin por ejemplo
en Windows NT todos los hilos son soportados por el Kernel;
imaginemos que alguien llaga a un cajero para depositar dinero
en una cuenta y casi al mismo tiempo un segundo cliente
realiza la misma operacin sobre la misma cuanta en el
segundo cajero quedara bloqueado asta que el registro que
esta siendo actualizado por el primer cajero quede liberado.

ESTADOS DE UN HILO

Igual que los procesos con un solo hilo de control, los hilos
pueden encontrarse en unos de los siguientes estados.
NUEVO.- El hilo ha sido creado pero aun no ha sido activado.
Cuando se active pasar al estado preparado.
PREPARADO.- El hilo est activado y le ha sido asignada la UCP.
EN EJECUCIN.- El hilo est activo y le ha sido asignada la
UCP(solo hilo activos preparados solo pueden ser ejecutados).
BLOQUEADO.- El hilo espera que otro elimine el bloqueo de un
hilo bloqueado.
DORMIDO. -El hilo est bloqueado durante una cantidad de
tiempo determinada despus de la cual despertar y pasar al
estado preparado.
ESPERANDO.-El hilo est esperando que ocurra alguna cosa:una
condicion,una operacin de E/S o adquirir la propiedad de un
objeto sincronismo.Cuando ocurra, pasar al estado preparado.
MUERTO.-El hilo ha finalizado (est muerto) pero todava no ha
sido recogido por su padre.Los hilos muertos no pueden
alcanzar ningn otro estado.

Descrito en lo anterior no se muestra los estados nuevo y
muerto ya que no hay estados de transicin durante la vida del
hilo; esto es,no se puede transitar al estado nuevo ni desde el
estado muerto.

La transicin entre estados est controlada por un planificador:
parte del ncleo del sistema operativo encargada que todos los
hilos que esperan ejecutarse tengan su oportunidad.Si un hilo
en ejecucin no puede continuar pasar al estado bloqueado; o
tambin, si puede continuar y el planificador decide que ya ha
sido ejecutado el tiempo suficiente,pasar al estado
preparado.Si el proceso est bloqueado pasar a preparado
cuando se d el evento por el que espera; puede estar
esperando a que otro hilo elimine el bloqueo,o bien si est
dormido,esperar a que pase el tiempo por el que fue enviado a
este estado para ser activado; y si est preparado pasar a
ejecucin cuando el planificador lo decida porque los dems
hilos ya han tenido su parte de tiempo de UCP.

CUANDO SE DEBE CREAR UN HILO

Segn lo expuesto anteriormente,cada vez que se crea un
proceso, el S.O crea un hilo primario.Para muchos procesos ste
es el nico hilo necesario.
Sin embargo,un proceso puede crear otros hilos para ayudarse
en su trabajo,utilizando la UCP al mximo posible.Por ejemplo
supongamos el diseo de una aplicacin procesador de
texto.sera asertado crear un hilo separado para manipular
cualquier tarea de impresin? Este permitira al usuario
continuar utilizando la aplicacin mientras se est imprimiendo
el documento.En cambio,que suceder si los datos del
documento cambian mientras se imprime? ste es un problema
que habra resolver,quizs creando un fichero temporal que
contenga los datos a imprimir.
Es evidente que los hilos son extraordinariamente tiles pero
tambin es evidente que si no se utilizan adecuadamente
pueden introducir nuevos problemas mientras tratamos de
resolver otros ms antiguos.Por lo tanto,es un error pensar que
la mejor forma de desarrollar una aplicacin es dividirla en
partes que se ejecuten cada una como un hilo.


PROGRAMAR CON HILOS

La mayoria del soporte de java proporciona para trabajar con
hilos recide en la clase Theread del paquete java.lang, aunque
tambin la clase Objecto, la interfaz Runnable,la interfaz
Thread.UncaughtExceptionHandler y las clases ThreadGroup y
ThreadLocal del mismo paquete,as como la mquina
virtual,proporcionan algn tipo de soporte.

CREAR UN HILO
Los hilos de java se pueden crear en dos formas: escribiendo
una nueva clase derivada de Theread, o bien haciendo una clase
existente implementa la interfaz Runnable .

La clase Thread,que implemente la interfaz Runnable,de forma
resimida,est definida asi:

public class Thread extends Object implements Runnable

{

//Atributos

static int MAX_PRIORITY;

//Prioridad mxima que un hilo puede tener.

static int MIN_PRIORITY;

//Prioridad mnima que un hilo puede tener.

static int NORM_PRIORITY;

//Prioridad asignada por omisin a un hilo.

//Constructores

Thread ([argumentos])

//Mtodos

static Theread currentThread()

//Devuelve una referencia al hilo que actualmente esta en
ejecucin.

long getID()

//Devuelve el identificador del hilo.

String getName()

//Devuelve el nombre del hilo.

int getPriority()

//Devuelve la prioridad del hilo.

void interrupt()

//Enva este hilo al estado de preparado.

boolean isAlive()

//Verifica s este hilo est vivo (no ha terminado).

boolean isDaemon()

//Verifica s este hilo es un demonio. Se da este nombre a

//un hilo se ejecuta en segundo plano, realizando una

//operacin especfica en tiempos predefinidos, o bien en

//respuestas a ciertos eventos.

boolean is Interrupted()

//Verifica si este hilo ha sido interrumpido.

void join([milisegundos[. nanosegundos]])

//Espera indefinidamente o el tiempo especificado,a que este

//hilo termine (a que muera).

void run()

//Contiene el cdigo que es ejecutar cuando el hilo pase

//al estado de ejecucin.Por omisin no hace nada.

void setDaemon(boolean on)

//Define este hilo como un demonio o como un hilo de usuario.

void setName(String nombre)

//Cambia el nombre de este hilo.

void setPriority(int nuevaPrioridad)

//Cambia la prioridad de este hilo.Por omisin es normal

//(NORM_PRIORITY).

static void sleep(long milisegundos[,int nanosegundos])

//Enva este hilo a dormir por el tiempo especificado.

void start()

//Inicia la ejecucin de este hilo:la mquina virtual de Java

//invoca al mtodo run de este hilo.

static void yield()

//Detiene temporalmente la ejecucin de este hilo para

//permitir la ejecucin de otros.

//Mtodos heredados de la clase Object:notify,notifyAll y wait
void notify()

//Despierta un hilo de los que estn esperando por el

//monitor de este objeto.

void notifyAll()

//Despierta todos los hilos que estn esperando por el

//monitor de este objeto.

void wait ([milisegundos[,nanosegundos]])

//Enva este hilo al estado de espera hasta que otro hilo

//invoque al mtodo notify o notifyAll,o hasta que transcurra

//el tiempo especificado.

}
Una clase que implemente la interfaz Runnable tiene que
sobreescribir el mtodo run aportado por est,de ah que
Thread proporcione este mtodo aunque no haga nada.El
mtodo run contendr el cdigo que debe ejecutar el hilo.

Qu es la programacin multihilos?

Un programa multihilo contiene dos o ms partes que se
pueden ejecutar de manera concurrente o simultnea. A cada
una de esas partes se les denomina hilo y cada uno de ellos
define un camino de ejecucin independiente. Se puede ver a la
programacin multihilo como una forma especializada de
multitarea.

Originalmente, la programacin con hilos fue explotada con el
fin de lograr que algunos programas resultaran ms sencillos de
escribir: si un programa puede dividirse en varias tareas, suele
ser ms fcil programar el algoritmo como tareas o hilos
separados. Los programas que caen dentro de esta categora,
tpicamente son especializados y se encargan de mltiples
tareas independientes. Frecuentemente, estos programas
fueron escritos como procesos separados que utilizaban
herramientas de comunicacin dependientes del sistema
operativo, tales como seales y espacios de memoria
compartida para hacer la comunicacin entre los procesos,
incrementando de esta forma la complejidad de los sistemas.

La popularidad de los hilos se increment cuando las interfaces
grficas se convirtieron en un estndar para computadoras de
escritorio, debido a que el sistema de hilos permiti al usuario
percibir un mejor desempeo de los programas. La introduccin
de hilos en estas plataformas no hizo a los programas ms
rpidos, pero cre en el usuario una ilusin de desempeo ms
rpido, quien ahora tena un hilo dedicado para el servicio de
entrada o para la salida en pantalla.

Вам также может понравиться