0% encontró este documento útil (0 votos)
105 vistas10 páginas

Programacion Concurrente

La programación concurrente trata de técnicas para expresar paralelismo entre tareas y resolver problemas de comunicación y sincronización entre procesos. En Java, los hilos (threads) permiten ejecución concurrente de código al compartir el espacio de direcciones de un proceso. Los hilos se crean extendiendo la clase Thread o implementando la interfaz Runnable, y se ejecutan llamando al método start().

Cargado por

Mayra Olortegui
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
105 vistas10 páginas

Programacion Concurrente

La programación concurrente trata de técnicas para expresar paralelismo entre tareas y resolver problemas de comunicación y sincronización entre procesos. En Java, los hilos (threads) permiten ejecución concurrente de código al compartir el espacio de direcciones de un proceso. Los hilos se crean extendiendo la clase Thread o implementando la interfaz Runnable, y se ejecutan llamando al método start().

Cargado por

Mayra Olortegui
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 10

1. Qu es la programacin concurrente?

Se conoce por programacin concurrente a la rama de la informtica


que trata de las tcnicas de programacin que se usan para expresar
el paralelismo entre tareas y para resolver los problemas de
comunicacin y sincronizacin entre procesos.
La concurrencia
contemporneos.

aparece

cuando

dos

ms

procesos

son

Un caso particular es el paralelismo (programacin paralela).

Los procesos pueden competir o colaborar entre s por los recursos


del sistema. Por tanto, existen tareas de colaboracin y
sincronizacin.
La programacin concurrente se encarga del estudio de las nociones
de ejecucin concurrente, as como sus problemas de comunicacin y
sincronizacin.
El principal problema de la programacin concurrente corresponde a
no saber en qu orden se ejecutan los programas (en especial los
programas que se comunican). Se debe tener especial cuidado en que
este orden no afecte el resultado de los programas.
2. Beneficios

Velocidad de ejecucin. Al subdividir un programa en procesos,


stos se pueden repartir entre procesadores o gestionar en un
nico procesador segn importancia.

Solucin a problemas de esta naturaleza. Existen algunos


problemas cuya solucin es ms fcil utilizando esta
metodologa.
-

Sistemas de control: Captura de datos, anlisis y actuacin


(p.ej. sistemas de tiempo real).

Tecnologas web: Servidores web que son capaces de


atender varias peticiones concurrentemente, servidores de
chat, email, etc.

Aplicaciones basabas en GUI: El usuario hace varias


peticiones a la aplicacin grfica (p.ej. Navegador web).

Simulacin: Programas que modelan sistemas fsicos con


autonoma.

Sistemas Gestores de Bases de Datos: Cada usuario un


proceso.

3. Threads/hilos
Definicin: Una secuencia de control dentro de un proceso que
ejecuta sus instrucciones de forma independiente.
Existe concurrencia a dos niveles: entre procesos y entre threads.
Procesos: entidades pesadas con espacio en el ncleo. Cambios de
contexto costosos
Threads: entidades ligeras en el espacio de usuario. Cambios de
contexto poco costosos.
Los threads/hilos pueden estar en dos niveles: a nivel usuario
(p.ej. java) o a nivel del sistema operativo (hilos del sistema).
Los threads/hilos de sistema dan soporte a los threads/hilos de
usuario mediante un API (Application Program Interface).
Estndares
Cada sistema operativo implementa los threads/hilos de sistema
de manera diferente: win32, OS/2 y POSIX (pthreads).
Implementacin
A nivel usuario (librera) o a nivel de ncleo (llamadas al sistema).
El estndar POSIX es del primer tipo.
Planificacin
Existen procesadores lgicos (los threads compiten por cada
procesador lgico), y los procesadores lgicos compiten por los
fsicos (SOLARIS).
4. Threads/hilos en Java

Java proporciona un API para el uso de hilos: clase Thread dentro


del paquete java.lang.Thread.
Es de gran utilidad tener un lenguaje de alto nivel para programar
concurrentemente utilizando threads/hilos, de ah el potencial y la
fama de Java.
Cuando arranca un programa existe un hilo principal (main), y
luego se pueden generar nuevos hilos que ejecutan cdigo en
objetos diferentes o el mismo.
La clase Thread dispone de una serie de mtodos para
caracterizar el thread/hilo en el programa: isAlive(), isDaemon(),
setName(), setDaemon(), run(), etc.

Los threads son procesos ligeros, con lnea de flujo de control


propia pero que comparte el espacio de direcciones del programa.
Los threads hacen posible la ejecucin concurrente de
cdigo.
Los cambios de contexto son menos costosos en tiempo de
ejecucin.
Un thread se crea en Java instanciando un objeto de la clase
Thread.
El cdigo que ejecuta un thread est definido por el mtodo run()
que tiene todo objeto que sea instancia de la clases Thread.
La ejecucin del thread se inicia cuando sobre el objeto Thread se
ejecuta el mtodo start().
De forma natural, un thread termina cuando en run() se alcanza
una sentencia return o el final del mtodo. (Existen otras formas
de terminacin forzada)
Constructores de la Clase Thread
Thread()
Thread(Runnable threadOb)
Thread(Runnable threadOb, String threadName)
Thread(String threadName)
Thread(ThreadGroup groupOb, Runnable threadOb)
Thread(ThreadGroup groupOb, Runnable threadOb, String
threadName);
Thread(ThreadGroup groupOb, String threadName)

Existen varios constructores de la clase Thread (y transferido por


herencia a todas su extensiones).
Desde el punto de vista estructural existen dos variantes bsicas:
-

Las que requieren que el cdigo del mtodo run() se


especifique explcitamente en la declaracin de la clase.
Por ejemplo: Thread(String threadName)

Las que requieren un parmetro de inicializancin que


implemente la interfaz Runnable.
Por ejemplo: Thread(Runnable threadOb)

Los restantes constructores resultan de si se asigna un nombre la


threads, y que solo afecta para inicializar ese atributo en la

instancia del objeto, y pueda utilizarse para que en fases de


verificacin cada thread pueda autoidentificarse, o de si se le crea
dentro de un ThreadGroup, lo cual limita su accesibilidad y su
capacidad de interaccin con threads que han sido creados en
otros ThreadGroup.

La clase java PingPong es una extensin de la clase Threads, por


lo que cada una de sus instancias (por ejemplo t1 y t2 representan
un nuevo thread java.
El metodo run() es sobreescrito en la clase PingPong, y establece
el cdigo que se ejecutar en cada instancia de la clase. En el
ejemplo consiste en un bucle indefinido de escribir el valor del
atributo word, y de suspenderse durante los milisegundos
expresador en el atributo delay.
La sentencia try .. catch tiene que ser utilizada porque el mtodo
sleep puede elevar una excepcin del tipo InterruptException.
Con las sentencias que declaran e instancian los dos objetos t1 y
t2 de la clase PingPong se han creado dos threads. La creacin
supone que a los thread se les ha dotado de los recursos que
requieren, pero an estn inactivos (esto es no se est ejecutando
las sentencias de su mtodo run()).

Con las sentencias que invocan los mtodos t1.start() y t2.start()


de los objetos de la clase PingPong, se inicia en la ejecucin del
cdigo de los respectivos procedimiento run().
En este caso (para hacer el ejemplo sencillo) los threads no
finalizan nunca (observese el bucle while(true) de los mtodos
run()). Se acabarn desde el entorno abortando el programa
principal y todo lo que depende de l.

La segunda posibilidad de crear un thread es a travs de la


utilizacin de un objeto que implemente la interface Runnable, y
con el que se incorpora el mtodo run() que establece las
actividades que va a realizar.
La clase MiClase implementa la interfaz Runnable, y por ello se le
requiere que establezca el cdigo del mtodo abstracto run() al
que obliga ser la implementacin de la interfaz Runnable.
En el programa que declara el nuevo thread, se debe declarar
primero el objeto t1 de la clase MiClase, y posteriormente cuando
se crea el threads (se instancia el objeto t1 de la clase Thread) se
le pasa como parmetro de su constructor.
Este es el procedimiento ms habitual de crear threads en java, ya
que permite herencia mltiple, al poder ser la clase Runnable
extensin de cualquier otra clase que ya est definida.

La clase PingPong implementa la interfaz Runnable, y en


consecuencia define el mtodo run() que constituir el cuerpo de
futuros threads.
Aunque no ocurre en el ejemplo, la clase PingPong podra ser una
extensin de otra clase, de la que heredara su funcionalidad y sus
recursos.
Cuando instancian los threads t1 y t2 (en este caso directamente
de la clase Thread, aunque podra ser de cualquier otra derivada
de ella), se le pasa como valor actual del parmetro Runnable
threadOb del constructor, los objetos Runnables r1 y r2 de la clase
PingPong que fueron previamente instanciados.
La declaracin de los objetos runnables podra ser directa dentro
de la declaracin de los threads, solo que en ese caso seran
annimos:
PingPong t1 = new Thread(new PingPong(ping,33));
PingPong t2 = new Thread(new PingPong(PONG,100));
O incluso con los thread tambin annimos:
new Thread(new PingPong(ping,33));
new Thread(new PingPong(PONG,100));

5.

Mtodos de la clase Thread: Control de finalizacin.

final boolean isAlive()


-

final void join() throws InterruptedException


-

Retorna true si el thread se encuentra en el estado Alive


(en alguno de sus subestados), esto es, ya ha comenzado y
an no ha terminado.

Suspende el thread que invoca hasta que el thread


invocado haya terminado.

final void join(long milliseconds) throws InterruptedException


-

Suspende el thread que invoca hasta que el thread


invocado haya terminado o hasta que hayan transcurrido
los milisegundos.

6. Ejecucin Concurrente y hebras

7. Estados de los Hilos

8. Ejemplo Hora

9. Ejemplo Sonido

10. Ejemplo Reloj

11. Resumen
Los programas concurrentes tienen varias hebras de ejecucin
(threads) que avanzan a la vez
En Java las hebras son objetos de una clase
que extiende Thread
que implementa Runnable
El mtodo run() determina qu hace la hebra Para arrancar
una hebra t se hace t.start()
Una hebra termina cuando se llega al final de run() tambin
por interrupciones
Un programa termina cuando terminan todas sus hebras

tambin la hebra inicial que ejecuta main()

También podría gustarte