Escolar Documentos
Profissional Documentos
Cultura Documentos
PROGRAMAÇÃO AVANÇADA
Introdução à Concorrência (RESUMO)
Cenário das estradas
¨ Nos programas
concorrentes, as atividades
computacionais se
sobrepõem (intercalam) no
tempo (estrada com várias
faixas)
¨ As execuções das atividades
podem ser simultâneas, i.e.,
paralelismo (várias
estradas)
Intercalamento
¨ A execução concorrente
não requer múltiplos
processadores
¨ Intercalar as instruções
de vários processos em
um único processador
pode ser usado para
simular a concorrência,
dando a ilusão de
execução paralela
Intercalamento
¨ Se houver múltiplos
processadores, as
instruções de um
programa concorrente
podem realmente ser
executadas em
paralelo (limitado a
quantidade de
processadores)
Sequencial, concorrente e paralelo
¨ Um programa sequencial possui uma única thread
¨ Um programa concorrente contém duas ou mais
threads
¨ Cada thread é um programa sequencial, ou seja,
uma sequência de instruções que são executadas
uma após a outra
¨ Todo sistema paralelo é concorrente, mas nem todo
sistema concorrente é paralelo
Concorrência e distribuição
¨ Várias estradas (e talvez
com várias vias cada)
¨ Máquina única (um ou
mais núcleos): interações
de memória
compartilhada
¨ Múltiplas máquinas (onde
cada pode ser um ou
mais processadores):
interações de rede de
computadores
Problema concorrente (1)
Quantas threads?
• 9 threads (uma para
cada valor de C);
• 3 threads (uma para
cada linha de C); ou
• 3 threads (uma para
cada coluna de C)
Há a necessidade de
sincronismo?
Sim. Poderia ser a exclusão
mútua, garantindo que o acesso
à conta fosse exclusivo
Problema concorrente (3)
Crivo de Erastótenes
Há a necessidade de
sincronismo?
Sim. Poderia ser a
sincronização de condição,
que avisaria quando tivesse
“eliminado” o primero
múltiplo
Comunicação entre processos
¨ Mundo real: é a
comunicação visando a
direção defensiva
¨ As threads/processos
trabalham juntos e se
comunicam com os outros
¨ A comunicação pode ser
de duas formas:
variáveis
compartilhadas ou troca
de mensagens
Comunicação entre processos
¨ Quando variáveis compartilhadas são usadas, um
processo armazena um valor em uma variável que é
lida por outro processo
¨ Quando a troca de mensagens é usada, um processo
envia uma mensagem, por algum canal de
comunicação, que é recebida por outro processo
Processos
¨ Programa é o código; processo é
a execução; um processo é
basicamente um programa em
execução
¨ Um processo inclui: espaço de
endereçamento (memória
“virtual” exclusiva - código e
dados) + registradores + pilha
de execução
¨ O início e término do processo
(controle) pode ser pelo usuário,
por um aplicativo ou pelo sistema
operacional
Threads
¨ Um processo pesado (heavyweight)
pode ter uma ou mais threads
(multithread)
¨ Thread é um processo leve. É a
unidade básica de uso da CPU
¨ É leve porque só tem registradores
e pilha; o código, dados globais e
demais recursos, são
compartilhados com o processo
¨ O compartilhamento faz com que
o overhead das threads seja
mínimo
Vantagens de um processo com
múltiplas threads
¨ Threads são processos "leves",
isto é, a troca de contexto é
mais rápida, além do tempo
de criação ser bem menor
¨ De forma geral, diminui o
tempo de resposta do
processo como um todo
¨ Maior facilidade para
mesclar threads I/O-bound
com threads CPU-bound
¨ Podem usar mais
eficientemente as
arquiteturas multicores
Principais usos de um processo com
múltiplas threads
¨ Não esqueça que as várias threads de um processo
trabalham em conjunto
¨ Se você tem uma aplicação que tem partes CPU
bound e outras partes são I/O bound, você ganha
sempre!
¨ Porque se uma thread está bloqueada (I/O bound)
a outra pode executar (CPU bound)
¨ Por exemplo, uma aplicação que acessa dispositivos
secundários lentos (disco local ou remoto), e não
quer perder o processador para outro processo,
pode definir outras threads que sejam CPU bound
Vantagens da programação multicore
¨ Em um sistema com um
único núcleo,
concorrência significa que
a execução das threads
vai ser intercalada ao
longo do tempo
¨ Em um sistema com
múltiplos núcleos,
concorrência significa que
algumas threads vão
executar em paralelo pois
o sistema poderá atribuir
um núcleo diferente para
cada thread
Condições de corrida
thread2: x := x - 1
¨ Problemas com a
interação entre tarefas
concorrentes causavam
reinicialização
periódica do software
reduzindo a
disponibilidade para a
exploração