Programação
Programação concorrente usando threads
POSIX e Java
MAC 431 / MAC 5742
Introdução à Computação Paralela e Distribuída
Daniel Cordeiro
DCC - IME - USP
13 de agosto de 2012
Programação concorrente usando threads POSIX e Java
Introdução
Por que escrever programas concorrentes?
Desempenho para explorar arquiteturas paralelas com memória compartilhada (SMP, hyperthreaded, multi-core,
NUMA, etc.)
Modelagem para descrever o paralelismo natural de algumas aplicações (tarefas independentes, sobreposição de operações de E/S, etc.)
Daniel Cordeiro – http://www.ime.usp.br/~danielc/
13 de agosto de 2012
2 / 28
Programação concorrente usando threads POSIX e Java
Processos vs. threads
Processos
Cada processo tem seu próprio espaço de endereçamento: segmento de texto: contém o código executável segmento de dados: contém as variáveis globais pilha: contém dados temporários (variáveis locais, endereços de retorno, etc.)
O contador de programa e os registradores da CPU fazem parte do contexto do programa
O contexto do programa é o conjunto mínimo de dados usados por um processo e deve ser gravado quando um processo é interrompido e relido quando um processo é retomado
Daniel Cordeiro – http://www.ime.usp.br/~danielc/
13 de agosto de 2012
3 / 28
Programação concorrente usando threads POSIX e Java
Processos vs. threads
Threads
Permitem múltiplas atividades independentes dentro de um único processo
Threads de um mesmo processo compartilham:
Todo o espaço de endereçamento, exceto a pilha, os registradores e o contador de programa
Arquivos abertos
Outros recursos
Também são chamados de processos leves, pois a criação das threads e a troca de contexto são mais rápidas
Permitem um alto grau de cooperação entre as atividades!
Daniel Cordeiro – http://www.ime.usp.br/~danielc/
13 de agosto de 2012
4 / 28
Programação concorrente usando threads