Programação concorrente

Programação concorrente ou programação simultânea é um paradigma de programação para a construção de programas de computador que fazem uso da execução simultânea de várias tarefas computacionais interativas, que podem ser implementadas como programas separados ou como um conjunto de threads criadas por um único programa. Essas tarefas podem ser executadas por um único processador, vários processadores em um único equipamento ou 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 simultâneo aos recursos computacionais são as principais questões discutidas durante o desenvolvimento de sistemas simultâneos. 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 simultâneos por natureza.

Interação e comunicação concorrente

Em alguns sistemas computacionais simultâneos, a comunicação entre os componentes é escondida do programador, enquanto em outros a comunicação deve ser lida 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órias compartilhadas, o que geralmente requer o desenvolvimento de alguns métodos de trava como exclusão mútua, semáforo ou 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 mensagens, cuja leitura pode ser feita 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. 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 balanco:

bool saque( int quantia )
{
   if( balanco > quantia )
   {
      balanco = balanco - quantia;
      return true;
   }
   else
   {
      return false;
   }
}

Suponha que balanco = 500, e dois processos concorrentes realizam a chamada saque(300) e saque(350), respectivamente. Se em ambas as operações a linha 3 é executada antes da linha 5 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 subtraindo os valores a serem sacados em ambos os processos. Além disso, o resultado final da operação também é indefinido e dependerá da ordem em que os processos terminarem a sua execução, sendo que, o processo que executar a linha 5 por último terá o seu resultado gravado em definitivo. Esse tipo de problema com recursos compartilhados requer o uso de controles de concorrência, ou algoritmos não bloqueantes.

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.

Este é um exemplo de como resolver o problema da indefinição do resultado da concorrência, acima:

bool saque( int quantia )
{
   pthread_mutex_lock(v_bloqueio);
   if( balanco > quantia )
   {
      balanco = balanco - quantia;
      pthread_mutex_unlock(v_bloqueio);
      return true;
   }
   else
   {
      pthread_mutex_unlock(v_bloqueio);
      return false;
   }
}

Nesta alteração, a instrução da linha 3 diz para o processo iniciar o bloqueio marcando na variável "v_bloqueio" que foi ele quem bloqueou. Se esta variável já estiver marcada como "bloqueada", o processo aguarda sua liberação para seguir em frente. Caso contrário, executa as demais instruções. Quando executar o comando para desbloquear, seja na linha 7 ou 12, o próximo processo que estiver aguardando a obtenção do bloqueio irá verificar que pode continuar. Dessa forma, apenas um processo por vez executa o teste e alteração da variável "balanco", com seu valor já atualizado e evitando assim a impresivibilidade do resultado.

Obviamente, o contratempo desta abordagem é "afunilar" o processamento paralelo. No pior caso, se todos os processos chegarem a este trecho ao mesmo tempo, apenas um de cada vez irá executá-lo. Entretanto, se estas situações forem uma porção mínima em todo o sistema, esta limitação será insignificante, dado a vantagem do restante do processamento paralelo.

Suporte em linguagens

As linguagens de programação concorrente sã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.

Atualmente, as linguagens mais utilizadas para tais construções são Java e 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 é 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 e Occam tiveram uso industrial em vários momentos desde a década de 1980.

Várias outras linguagens oferecem o suporte à concorrência através de bibliotecas, como por exemplo C e C++.

Read other articles:

Instrumen abdikasi yang ditandatangani oleh Edward VIII dan tiga saudara laki-lakinya Pada tahun 1936, krisis konstitusional di Kerajaan Britania disebabkan oleh usulan Raja-Kaisar Edward VIII untuk menikahi Wallis Simpson, seorang sosialita asal Amerika Serikat yang sudah bercerai dari suami pertamanya dan mengupayakan perceraian keduanya. Pranala luar Pathé Newsreel recording of Edward's abdication speech Diarsipkan 2011-02-11 di Wayback Machine. (requires Flash) Artikel bertopik umum ini ...

 

 

Anggota kelompok revisionis sayap kanan Serikat Reformasi Buku Pelajaran Sejarah Jepang memasang spanduk bertuliskan [Berikan] anak-anak buku-buku pelajaran sejarah yang benar di depan Kuil Yasukuni Kontroversi buku pelajaran sejarah Jepang melibatkan isi kontroversial dalam buku-buku pelajaran sejarah yang disepakati pemerintah yang digunakan dalam pendidikan menengah (SMP dan SMA) Jepang. Kontroversi tersebut utamanya terkait upaya nasionalis Jepang untuk melakukan pencucian putih terhadap ...

 

 

Nick AldisAldis pada Januari 2013Nama lahirNicholas AldisLahir6 November 1986 (umur 37)Docking, Norfolk, InggrisPasanganMickie James ​(m. 2015)​Anak1Karier gulat profesionalNama ringBrutus Magnus[1][2]Magnus[3]Nick Aldis[1]Sir Brutus Magnus[4]Tinggi6 ft 4 in (193 cm)[5]Berat242 pon (110 kg)[5]Asal dariKing's Lynn, Inggris[1][2]Dilatih olehDropkixx Academy[6 ...

Town in Maine, United StatesBoothbay HarborTownTown of Boothbay HarborBoothbay Harbor aerial photo SealLocation in Lincoln County and the state of MaineCoordinates: 43°51′6″N 69°37′40″W / 43.85167°N 69.62778°W / 43.85167; -69.62778CountryUnited StatesStateMaineCountyLincolnIncorporated1889Area[1] • Total9.22 sq mi (23.87 km2) • Land5.70 sq mi (14.76 km2) • Water3.52 sq mi (...

 

 

Cette page est une liste des partis politiques du Canada. Affiche patriotique du parti unioniste de Robert Laird Borden aux élections fédérales de 1917. Aspects juridiques Ce n'est qu'en 1970, avec la réforme de la Loi électorale du Canada que les partis politiques fédéraux acquièrent une existence juridique et sont tenus de s'enregistrer. Ils sont également tenus de soumettre un rapport d'activités. En 2004, un amendement à la Loi électorale définit un parti comme « une or...

 

 

Not to be confused with Accountant in Bankruptcy. Office of the Accountant of CourtOifis Cunntasair na CùirteAgency overviewFormed1849TypePublic bodyJurisdictionScotlandHeadquartersHadrian House, Callendar Business Park, Callendar Road, Falkirk, FK1 1XRDAgency executiveFiona Brown, Accountant of CourtParent agencyScottish Courts and Tribunals ServiceKey documentJudicial Factors Act 1849WebsiteThe Accountant of CourtMapScotland in the UK and Europe Part of a series onScots law Administration ...

American basketball player (born 1997) Jackie YoungYoung with Las Vegas in 2019No. 0 – Las Vegas AcesPositionShooting guardLeagueWNBAPersonal informationBorn (1997-09-16) September 16, 1997 (age 26)Princeton, Indiana, U.S.Listed height6 ft 0 in (1.83 m)Listed weight165 lb (75 kg)Career informationHigh schoolPrinceton Community(Princeton, Indiana)CollegeNotre Dame (2016–2019)WNBA draft2019: 1st round, 1st overall pickSelected by the Las Vegas AcesPlayi...

 

 

Ekonomi terbesar di dunia berdasarkan PDB (nominal) pada 2022menurut estimasi Dana Moneter Internasional (dalam triliun dolar Amerika Serikat) Berikut adalah daftar ekonomi negara-negara di dunia yang disusun menurut produk domestik brutonya (PDB) di pasar atau nilai tukar resmi pemerintah. Data di sini adalah perkiraan untuk tahun 2022 yang dihasilkan oleh Dana Moneter Internasional serta data tahun 2020 yang dihasilkan oleh Bank Dunia dan Perserikatan Bangsa-Bangsa. Negara berdasarkan PDB ...

 

 

Commander Talbot (left) received the Navy Cross from Secretary of the Navy Frank Knox in July 1942 Rear Admiral Paul Hopkins (P. H.) Talbot (3 April 1897 – 9 September 1974)[1] was an officer in the United States Navy who served in World War I and World War II. A 1918 graduate of the United States Naval Academy, he served on destroyers during World War I. He was awarded the Navy Cross for distinguished service and heroism as commander of Destroyer Squadron 59 while engaging the Japa...

هذه المقالة يتيمة إذ تصل إليها مقالات أخرى قليلة جدًا. فضلًا، ساعد بإضافة وصلة إليها في مقالات متعلقة بها. (مارس 2019) إدموند ميشيلز معلومات شخصية الميلاد 12 أكتوبر 1913   الجنسية بلجيكا  الحياة العملية المهنة سباح،  ولاعب كرة ماء  الرياضة كرة الماء،  والسباحة  تعد...

 

 

Youth wing of Communist Party of Nepal (Maoist Centre This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Young Communist League, Nepal – news · newspapers · books · scholar · JSTOR (February 2010) (Learn how and when to remove this message) Young Communist League, NepalFounded2006HeadquartersKathmandu., NepalMo...

 

 

United Nations resolution adopted in 2003 UN Security CouncilResolution 1484Location of Bunia in Ituri region of the Democratic Republic of the CongoDate30 May 2003Meeting no.4,764CodeS/RES/1484 (Document)SubjectThe situation concerning the Democratic Republic of the CongoVoting summary15 voted forNone voted againstNone abstainedResultAdoptedSecurity Council compositionPermanent members China France Russia United Kingdom United StatesNon-permanent members A...

Questa voce sugli argomenti sceneggiatori statunitensi e registi statunitensi è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti dei progetti di riferimento 1, 2. Charles M Seay (maggio 1921) Charles M. Seay (Atlanta, 22 maggio 1867 – Palestine, 12 novembre 1944) è stato un regista, sceneggiatore e attore statunitense attivo all'epoca del muto. Indice 1 Biografia 2 Filmografia 2.1 Regista 2.2 Sceneggiatore 2.3 Attore (parziale) 3 ...

 

 

Tom Pettersson Thông tin cá nhânTên đầy đủ Tom Peder PetterssonNgày sinh 25 tháng 3, 1990 (34 tuổi)Nơi sinh Trollhättan, Thụy ĐiểnChiều cao 1,90 m (6 ft 3 in)Vị trí Tiền vệ trung tâm / Trung vệThông tin độiĐội hiện nay Östersunds FKSố áo 2Sự nghiệp cầu thủ trẻNăm Đội0000–2006 Trollhättans FKSự nghiệp cầu thủ chuyên nghiệp*Năm Đội ST (BT)2007–2011 FC Trollhättan 101 (6)2012–2014 Åtvidabergs ...

 

 

この記事には複数の問題があります。改善やノートページでの議論にご協力ください。 出典がまったく示されていないか不十分です。内容に関する文献や情報源が必要です。(2014年7月) 脚注による出典や参考文献の参照が不十分です。脚注を追加してください。(2016年10月) ほとんどまたは完全に一つの出典に頼っています。(2016年10月)出典検索?: ヒメノ朝...

1598 decree granting religious freedom to Huguenots by Henry IV of France Henry IV of France, By the Grace of God, Most Christian King of France and Navarre The Edict of Nantes vteFrench Wars of Religion First; 1562–1563Conflict in the provinces; Rouen; Vergt; Dreux; Orléans Second; 1567–1568Saint-Denis; Chartres Third; 1568–1570Jarnac; La Roche-l'Abeille; Poitiers; Orthez; Moncontour; Saint-Jean d'Angély; Arney-le-Duc Fourth; 1572–1573Mons; Sommières; Sancerre; La Rochelle Fifth; ...

 

 

يفتقر محتوى هذه المقالة إلى الاستشهاد بمصادر. فضلاً، ساهم في تطوير هذه المقالة من خلال إضافة مصادر موثوق بها. أي معلومات غير موثقة يمكن التشكيك بها وإزالتها. (يوليو 2017) الدوري الأردنيالموسم2011–12البطلالفيصليهابطونكفرسومكأس الاتحاد الآسيويالفيصليالرمثا→ 2010–11 2012–13 ← الد�...

 

 

Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus. Certaines informations figurant dans cet article ou cette section devraient être mieux reliées aux sources mentionnées dans les sections « Bibliographie », « Sources » ou « Liens externes » (mai 2022). Vous pouvez améliorer la vérifiabilité en associant ces informations à des références à l'aide d'appels de notes. Pour les articles homonymes, voir Helena et Bonham Car...

يفتقر محتوى هذه المقالة إلى الاستشهاد بمصادر. فضلاً، ساهم في تطوير هذه المقالة من خلال إضافة مصادر موثوق بها. أي معلومات غير موثقة يمكن التشكيك بها وإزالتها. (ديسمبر 2018) سحيل جعيمه تقسيم إداري البلد  اليمن مديرية مديرية شبام المسؤولون محافظة محافظة حضرموت خصائص جغرافية إ...

 

 

Canonicus-class monitor For other ships with the same name, see USS Tecumseh. Tecumseh strikes a mine and sinks History United States NameUSS Tecumseh NamesakeTecumseh Ordered15 September 1862 BuilderCharles Secor & Co., Jersey City, New Jersey Laid down1862 Launched12 September 1863 Commissioned19 April 1864 FateSunk during the Battle of Mobile Bay, 5 August 1864 General characteristics TypeCanonicus-class monitor Displacement2,100 long tons (2,134 t) Tons burthen1,034 tons (bm) Len...