Escolar Documentos
Profissional Documentos
Cultura Documentos
Roteiro
Introduo sobre Programao Concorrente Threads Prioridades de threads e Agendamento Ciclo de vida de uma thread Interface Runnable Sincronizao de threads Daemon Threads Construes de alto nvel para tratamento de concorrncia
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
Introduo
Definio de Programao Concorrente:
Paradigma de linguagem de programao que faz uso da execuo concorrente (simultnea) de vrias tarefas computacionais Tipos de implementao:
Vrios programas Vrias threads de um mesmo programa
Introduo
Motivao :
Busca por melhoria de desempenho Escrever programas reais em domnios inerentemente concorrentes (simulaes) Desenvolvimento de novas arquiteturas (processadores com vrios ncleos)
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
Introduo
Programas x Processos:
Um processo a execuo de um programa
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
Introduo
Programas x Processos:
Um processo a execuo de um programa
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
Introduo
Problemas com concorrncia:
Programas no-determinsticos Programas dependente de velocidade (condies de corrida) Deadlock Starvation
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
No-determinismo
Programas seqncias (sem erros) so determinsticos Determinsticos: vrias execues obtm a mesma sada No-determinsticos: no podemos predizer qual a seqncia de passos que ocorrer Programas difceis de testar
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
No-determinismo
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
No-determinismo
Resultado da Execuo:
p1: 0; p1: 1; p1: 2; p1: 3; p1: 4; p1: 5; p1: 6; p1: 7; p1: 8; p1: 9; p1: 10; p1: 11; p1: 12; p1: 13; p1: 14; p1: 15; p1: 16; p2: 0; p2: 1; p2: 2; p2: 3; p2: 4; p2: 5; p2: 6; p2: 7; p2: 8; p2: 9; p2: 10; p2: 11; p2: 12; p2: 13; p2: 14; p2: 15; p2: 16; p2: 17; p2: 18;
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
No-determinismo
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
No-determinismo
Resultado da Execuo (uma das possibilidades):
P2: 0; P2: 1; P2: 2; P2: 3; P2: 4; P1: 0; P1: 1; P1: 2; P1: 3; P1: 4; P1: 5; P1: 6; P1: 7; P1: 8; P1: 9; P1: 10; P1: 11; P1: 12; P1: 13; P1: 14; P1: 15; P1: 16; P2: 5; P2: 6; P2: 7; P2: 8; P2: 9; P2: 10; P2: 11; P2: 12; P2: 13; P2: 14; P2: 15; P2: 16; P2: 17; P2: 18;
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
Condies de corrida
Programas seqenciais so independentes de velocidade (velocidade relativa entre os processos) Programas concorrentes so dependentes de velocidade Considere dois programas alterando o valor de uma varivel compartilhada...
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
Condies de corrida
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
Condies de corrida
Resultado da Execuo (uma das possibilidades):
Fim da execuo de 2. n = 1 Fim da execuo de 1. n = 2
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
Deadlock
Deadlock
Situao em que dois ou mais processos no progridem na execuo pelo fato de estarem esperando mutuamente pela liberao de recursos Mecanismos para evitar:
Ignorar: se acontecer reinicia o sistema Matar os processos envolvidos Evitar as condies propcias para deadlock (evitar aquisio incremental ou espera circular) Limitar o tempo mximo de alocao de recursos
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
Starvation
Todos os processos devem ter o seu progresso garantido mesmo que seja por um tempo finito Pr-condies: sistema livre de deadlock e com escalonamento justo O termo starvation usado quando um processo impedido de executar devido a um escalonamento injusto
Threads
Um processo convencional (peso pesado) a execuo de um programa:
espao de endereamento prprio alocao em memria principal tempo compartilhado de uso da CPU
A criao de um processo custosa Toca de contexto entre processos leva muito tempo
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
Threads
Thread uma linha de execuo de um programa, mas de peso leve
Compartilha o mesmo espao de endereamento e demais recursos de um processo pai Criao e troca de execuo entre threads so mais rpidas
processo
thread 1 thread 2
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
Threads
Nosso estudo de concorrncia ser concentrado em programas multithreading!
possvel criar tambm vrios processos usando a linguagem Java! Consulte a classe java.lang.ProcessBuilder
Threads
Panorama geral da classe java.lang.Thread
Construtores:
public Thread(String threadName) public Thread()
Mtodos bsicos:
Mtodo run(): contm o cdigo de execuo da thread Mtodo start(): dispara a execuo (chama o run)
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
Threads
define que ProgramaConcorrente uma Thread
Comea a execuo de uma thread Linguagem de Programao III Programao Concorrente em Java chama o mtodo run() de p1 Danilo Ricardo Barbosa de Arajo
Prioridades de Threads
Cada thread tem uma prioridade:
A prioridade um inteiro entre 1 e 10 Uma thread de alta prioridade tem preferncia sobre uma thread de baixa prioridade A prioridade padro 5 A prioridade herdada da thread pai
Escalonador ou agendador (scheduler): elemento da arquitetura multithreading que determina qual thread deve executar em um dado momento
Usa as prioridades para definir qual thread ir executar Atribui uma fatia de tempo mximo de execuo para cada thread
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
Prioridades de Threads
Mtodos:
int getPriority(): retorna a prioridade da thread void setPriority(int priority): altera a prioridade da thread
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
Prioridades de Threads
o que acontece quando a thread que Linguagem de Programao III Programao Concorrente em Java inicia tem prioridade menor? Danilo Ricardo Barbosa de Arajo
Prioridades de Threads
Resultado da Execuo:
P2: 0; P2: 1; P2: 2; P2: 3; P2: 4; P2: 5; P2: 6; P2: 7; P2: 8; P2: 9; P2: 10; P2: 11; P2: 12; P2: 13; P2: 14; P2: 15; P2: 16; P2: 17; P2: 18; P1: 0; P1: 1; P1: 2; P1: 3; P1: 4; P1: 5; P1: 6; P1: 7; P1: 8; P1: 9; P1: 10; P1: 11; P1: 12; P1: 13; P1: 14; P1: 15; P1: 16;
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
Pronto (ready): poder ir para o estado executando assim que processador indique que a vez desta thread Morto (dead): a execuo do mtodo run finalizou para esta thread
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
dormindo
Interface Runnable
Situao: queremos criar uma Applet Java que execute como uma Thread Como criar uma classe que herda de outra classe (Applet) e uma Thread? Usamos a interface Runnable!
A interface Runnable exige a definio do mtodo run(); Uma classe que implementa a interface Runnable pode ser passada por parmetro para o construtor da classe Thread
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
Interface Runnable
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
Resumo
Nesta primeira parte do estudo de concorrncia o foco foi em:
Conceitos bsicos de programao concorrente Primitivas que permitem a manipulao de threads diretamente e ciclo de vida de threads
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
Exerccio
Um programa Java foi colocado em um liquidificador e misturado!
Junte as linhas de cdigo mostradas na Figura 1 para compor as classes vazias mostradas na Figura 2. O cdigo obtido dever produzir a sada da Figura 3. Fique a vontade para adicionar pequenos detalhes, como alguns abre/fecha chaves!
1600 Bitz!
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
Figura 1
System.out.println(Dois + a.getCount()); Acumulador a = Acumulador.getAcum(); try { implements Runnable { counter += add; return counter; Thread.sleep(50); one.start();
public static Acumulador getAccum() { a.updateCounter(1); for (int x = 0; x < 99; x++) {
public void updateCounter(int add) { for (int x = 0; x < 98; x++) { two.start();
private static Acumulador a = new Acumulador(); public void run() { implements Runnable {
return a; a.updateCounter(1000);
Linguagem de Programao III Programao Concorrente em Java System.out.println (Hum + a.getCount()); Danilo Ricardo Barbosa de Arajo
Figura 2
public class Principal { class ThreadOne {
?
class Acumulador {
?
class ThreadTwo {
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo
Figura 3
Linguagem de Programao III Programao Concorrente em Java Danilo Ricardo Barbosa de Arajo