Saltar para o conteúdo

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

Checkwiki: E64 +fixes
(bot: revertidas edições de 87.196.116.226 ( modificação suspeita : -10), para a edição 13239144 de 201.15.55.174)
(Checkwiki: E64 +fixes)
'''Programação concorrente''' é um [[paradigma de programação]] para a construção de [[programas de computador|programas de computador]] que fazem uso da execução concorrente (simultânea) de várias tarefas computacionais interativas, que podem ser implementadas como programas separados ou como um conjunto de ''[[thread (ciência da computação)|threads]]'' criadas por um único programa. Essas tarefas podem ser executadas por um único [[processador]], [[Multicore|vários processadores em um único equipamento]] ou [[computação distribuída|processadores distribuídos por uma rede]]. Programação concorrente é relacionada com [[programação paralela]], mas foca mais na interação entre as tarefas. A interação e a comunicação correta entre as diferentes tarefas, além da coordenação do acesso concorrente aos recurso computacionais são as principais questões discutidas durante o desenvolvimento de sistemas concorrentes. Pioneiros na área de pesquisa incluem [[Edsger Dijkstra]], [[Per Brinch Hansen]], e [[C.A.R. Hoare]].
 
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.
 
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. Uma 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]].
 
== 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>:
 
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 ==
As '''linguagens de programação concorrente''' são [[linguagem de programação|linguagens de programação]] que provem construções para a concorrência. Tais construções podem envolver [[multitarefa]], suporte para [[sistemas distribuídos]], troca de mensagens e recursos compartilhados.
 
370 659

edições