Troca de Mensagens Programação concorrente Baseada em acesso a variáveis compartilhadas Programas tem de executar em hardware em que os processos (e processadores) compartilham memória
Troca de Mensagens Programação distribuída Normalmente rodam em arquiteturas com memória distribuída, com vários processadores Processadores compartilham apenas acesso a uma rede de comunicação processos se comunicam enviando mensagens entre si exemplo: redes de computadores.
Troca de Mensagens Uso de primitivas de comunicação para envio (send) e recebimento (receive) de mensagens Pederiam ser implementadas de forma semelhante a acesso a variáveis compartilhadas, mas seria pouco eficiente Na pratica, essas operações incluem alguma forma de sincronização.
Troca de Mensagens Processos compartilham canais de comunicação. Esses canais são abstrações da conexão física existente: abstraem tempo e erros de comunicação. Uso de operações send e receive A sincronização ocorre, visto que um processo não pode receber uma mensagem sem que outro tenha enviado. Não há variáveis compartilhadas!
Troca de Mensagens Várias formas de dar nomes aos canais, de usa-los e de sincronizar a comunicação Canais podem ser globais a todos os processos, podem ser direcionados, podem conectar dois ou mais processos Comunicação pode ser síncrona (bloqueante) ou assíncrona (não bloqueante)
Comunicação síncrona envio da mensagem é ação atômica participação dos dois processos sincronização da execução dos dois processos o primeiro a chegar espera pelo outro exemplo: telefone
Comunicação assíncrona mensagem enviada sem bloqueio recebimento com/sem bloqueio buffering se buffer estiver cheio o processo poderá ser bloqueado Exemplo: correio
Identificação de processos Telefone: linha dedicada vs. Linha chaveada Quadro de avisos qualquer um escreve/lê
Identificação de processos Canais dedicados são mais eficientes mensagem enviada sem custo de decifrar endereços modificação no sistema exige mudança no código fonte
Identificação de processos Sem identificação de processos a flexibilidade é ainda maior adicionar, remover, modificar processos dinamicamente
Fluxo de dados comunicação em uma direção ou nas duas direções Sistemas assíncronos usam fluxo unidirecional em sistemas síncronos é criado um canal de comunicação Eficiência
Criação de processos Processos criados no início da execução ou dinamicamente? Criação estática mais eficiente embedded systems configuração fixa melhor previsão de performance
Razões para criar processos dinamicamente Flexibilidade ex: terminais Uso dinâmico de recursos alguns recursos são usados apenas em algumas fases do programa Balanceamento de carga ex: aumento na demanda por certos processos
O que iremos estudar Programação distribuída através de Troca de mensagens assíncronas Troca de mensagens síncronas Chamada remota de procedimentos (RPC) e rendezvous. Todas as alterantivas são equivalentes. Cada uma é melhor que a outra para certos tipos de problemas.
Tipos de processos em programas distribuídos Filtros Clientes Servidores Peers – coleções de processos idênticos