Concorrência e paralelismo no desenvolvimento de aplicações
Anny Caroline Correa Chagas
Quem sou eu?
Participante do programa Google Summer of Code 2018
Bolsista de iniciação tecnológica no Laboratório de Ciência da Computação (LCC)
Técnico em informática pelo Colégio Realengo [2011-2013]
Concluindo o bacharelado em Ciência da Computação pela UERJ [2014-2018]
Um pouco �sobre �multitarefas
Computadores Monotarefa
permitiam executar uma única tarefa por vez
Apple DOS
MS-DOS
primeiro passo para a multitarefa, com o uso de TSR’s
Sistemas operacionais atuais
Os escalonadores
Processador
com 2 núcleos
Núcleo 1
Núcleo 2
Tarefa 1
Tarefa 2
Tarefa 3
Tarefa 4
?
Multiplexação por tempo
A
B
C
A
B
C
A, B, C: programas
Sistema Operacional
Entrada e saída
A
B
C
A
Sistema Operacional
Requisição de E/S
Término de E/S
SO
Serviços do Sistema Operacional
Estados de
um processo
Transições
NOVO
PRONTO
EM ESPERA
EM EXECUÇÃO
CONCLUÍDO
admitido
conclusão de evento ou I/O
espera por evento ou I/O
saída
escalonado
interrupção
NOVO
PRONTO
EM ESPERA
EM EXECUÇÃO
CONCLUÍDO
admitido
conclusão de evento ou I/O
espera por evento ou I/O
saída
escalonado
interrupção
Processos
O que é um
processo
Um programa em execução
“Dados usados no processo” - Espaço de endereçamento
Pilha: parâmetros de função, endereços de retorno e variáveis locais.�
Heap: alocação dinâmica�
Dados do processo: globais�
Texto: código executável do processo
Pilha de execução
int multiplica(int N1, int N2) {� int resultado;� resultado = N1 * N2;� return(resultado);�}
int main(void) {� int v1, v2, resultado;� v1 = 3;� v2 = 5;
resultado = multiplica(v1, v2);� printf("Resultado = %d\n", resultado);�}
O que é um
processo
Um programa em execução
Threads
O que é uma
Thread
Uma linha de execução
“Um thread é um caminho de execução dentro de um processo. Além disso, um processo pode conter várias threads. Quando você inicia o Word, o sistema operacional cria um processo e começa a executar a thread principal desse processo”.
Diferenças
… “a diferença essencial entre uma thread e um processo é o trabalho que cada um é usado para realizar. As threads são usadas para pequenas tarefas, enquanto os processos são usados para tarefas mais "pesadas" - basicamente a execução de aplicativos.
Propósito
Threads dentro do mesmo processo compartilham o mesmo espaço de endereço, enquanto diferentes processos não.
Isso permite que as threads leiam e gravem nas mesmas estruturas e variáveis de dados, além de facilitar a comunicação entre elas. A comunicação entre processos - também conhecida como IPC, ou inter-process communication - é bastante difícil e exige muitos recursos.
Memória
Desenvolvimento de aplicações
Na programação sequencial todas as instruções de um programa são executadas através de uma única linha de execução
Programação
Sequencial
Fluxo único de execução
tarefa 1
tarefa 2
tarefa 3
Na programação concorrente e paralela um programa pode ser executado através de diversas linhas de execução
Programação
Concorrente
e Paralela
vários fluxos de execução
tarefa 1
tarefa 2
tarefa 3
Não se pode supor nenhuma ordem de execução
Problemas
X = 1
X = 2*X
X = 3+X
X = 1
X = 2*X
X = 3+X
5
?
“Travas” - Locks
T1 | T2 |
lê X | |
X = 2*X | |
| lê X |
| X = 3 + X |
escreve X | |
Benefícios da programação concorrente
Exemplo �AudioLab Geo
Exemplo AudioLab Geo
Browser
E em outros
ambientes?
Arduino
Modelos de Concorrência
Assíncrono
Síncrono
Exemplo
Piscar um led a cada 1 segundo
Parar ao pressionar um botão, mantendo o LED sempre acesso �(mesmo após soltar o botão)��
Alternativa
“Sistemas reativos interagem continuamente e em tempo real com o ambiente sob os quais estão inseridos. Eles representam um campo amplo de aplicações e plataformas: de jogos eletrônicos em desktops, passando por apps em celulares, até a emergente internet das coisas em sistemas embarcados”.
Programação reativa
Céu-Arduino
loop do
par/or do
loop do
await 1s;
_leds_toggle();
end
with
await PRESS;
end
end