Programação concorrente: diferenças entre revisões

+lnk
(+lnk)
 
=== Comunicação por memória compartilhada ===
Componentes concorrentes comunicam-se ao alterar o conteúdo de [[memória compartilhada|áreas de memória compartilhadas]], o que geralmente requer o desenvolvimento de alguns métodos de trava como [[exclusão mútua]], [[Semáforo (computação)|semáforo]] ou [[monitor (concorrência)|monitor]] para gerenciar a utilização de um determinado recurso entre as tarefas.
 
=== Comunicação por troca de mensagens ===
Componentes concorrentes comunicam-se ao trocar [[mensagemtroca de mensagens|trocar mensagens]], cuja leitura pode ser feita [[Comunicação assíncrona|assincronamente]] (também denominada como "enviar e rezar", apesar da prática padrão ser reenviar mensagens que não são sinalizadas como recebidas) ou pelo método ''rendezvous'', no qual o emissor é bloqueado até que a mensagem seja recebida ([[comunicação síncrona]]).
 
A comunicação por mensagens tende a ser mais simples que a comunicação por memória compartilhada, e é considerada uma forma mais robusta de programação concorrente. Um ampla variedade de teorias matemáticas estão disponíveis para o entendimento e análise de sistemas de comunicação por envio de mensagem, incluindo o [[modelo de Ator]].
Como sistemas concorrentes necessitam a utilização de recursos compartilhados, a programação concorrente geralmente requer o uso de algum método de árbitro, um elemento neutro, para coordenar o acesso a tais recursos. Isso introduz a possibilidade do aparecimento de problemas com decisões não determinísticas, apesar de que o desenvolvimento cuidadoso de árbitros pode reduzir a probabilidade de tais situações aparecerem.
 
==Suporte em linguagens==
==Linguagens para programação concorrente==
As '''linguagens de programação concorrente''' são [[linguagem de programação|linguagens de programação]] que usamprovem construções para a concorrência. taisTais construções podem envolver [[multitarefa]], suporte para [[sistemas distribuídos]], troca de mensagens e recursos compartilhados.
 
Atualmente, as linguagens mais utilizadas para tais construções são [[Java (linguagem de programação)|Java]] e [[C sharp|C#]]. Ambas utilizam o modelo de [[memória compartilhada]], com o bloqueio sendo fornecido por monitores. Apesar disso, o modelo de troca de mensagens pode ser implementado sobre o modelo de memória compartilhada. Entre linguagens que utilizam o modelo de troca de mensagens, [[Erlang (linguagem de programação)|Erlang]] é possivelmente a mais utilizada pela indústria atualmente.
 
Várias linguagens de programação concorrente foram desenvolvidas como objeto de pesquisa, como por exemplo [[Pict]]. Apesar disso, linguagens como Erlang, [[Limbo (linguagem de programação)|Limbo]] e [[Linguagem de programação Occam|Occam]] tiveram uso industrial em vários momentos desde a [[década de 1980]].
78 149

edições