Programação concorrente: diferenças entre revisões
Conteúdo apagado Conteúdo adicionado
*txt |
|||
Linha 1:
'''Programação concorrente''' é
Vantagens do paradigma incluem o aumento de desempenho, pois aumenta-se a quantidade de tarefas sendo executadas em determinado período de tempo, e a possibilidade de uma melhor modelagem de programas, pois determinados problemas computacionais são concorrentes por natureza.
==Interação e comunicação concorrente==
Em alguns sistemas computacionais concorrentes, a comunicação entre os componentes é escondida do programador, enquanto em outros a comunicação deve ser lidada explicitamente. A comunicação explícita pode ser dividida em duas classes: por memória compartilhada ou por troca de mensagens.
=== Comunicação por memória compartilhada ===
Componentes concorrentes comunicam-se ao alterar o conteúdo de áreas de memória compartilhadas
=== Comunicação por troca de mensagens ===
Componentes concorrentes comunicam-se ao trocar [[mensagem|mensagens
A comunicação por mensagens tende a ser mais simples que a comunicação por memória compartilhada, e é considerada
==Coordenando o acesso aos recursos==
Um dos assuntos de maior discussão em programação concorrente é como prevenir que tarefas concorrentes interfiram umas nas outras. Por exemplo, considerando o seguinte algoritmo para realizar saques de uma conta representada pelo recurso compartilhado <code>balanco</code>:
<source lang="c" line>
{
3 balanco = balanco - quantia;▼
if( balanco > quantia )
4 return true;▼
{
5 } else return false;▼
6 }▼
Suponha que <code>balanco = 500</code>, e dois processos concorrentes realizam a chamada <code>saque(300)</code> e <code>saque(350)</code> . Se em ambas as operações a linha 2 é executada antes da linha 3 do processo concorrente, ambas as operações irão deduzir que o balanço é maior que a quantia a ser sacada, e a execução irá proceder subtraido os valores a serem sacados em ambos os processos. Apesar disso, como ambos os processos realizam o saque, o balanço acaba ficando com valor negativo, um resultado que não deveria acontecer. Esses tipos de probemas com recursos compartilhados requerem o uso de controles concorrentes, ou algoritmos não bloqueantes.▼
else
{
}
}
</source>
▲Suponha que <code>balanco = 500</code>, e dois processos concorrentes realizam a chamada <code>saque(300)</code> e <code>saque(350)</code>, respectivamente. Se em ambas as operações a linha
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.
==Linguagens para programação concorrente==
As '''linguagens de programação concorrente''' são linguagens de programação que usam construções para a concorrência. tais construções podem envolver
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
Várias outras linguagens oferecem o suporte à concorrência através de [[Biblioteca (computação)|bibliotecas]], como por exemplo [[Linguagem de programação C|C]] e [[C++]].
[[Categoria:Computação concorrente| ]]
|