Samtidig programmering

Den parallel programmering er en programmeringsparadigme i betragtning, i et program, at der findes adskillige semantiske batterier, der kan kaldes tråde , processer eller opgaver . De materialiseres i maskinen af ​​en udførelsesstabel og et sæt private data.

Konkurrence er vigtig, når du vil skrive programmer, der interagerer med den virkelige verden (som er en konkurrent) eller drage fordel af flere centrale enheder (koblet som i et multiprocessorsystem eller distribueret, muligvis i et gitter eller en klynge).

Klassifikation

Der er tre typer konkurrence:

Samtidig programmering er mere kompleks og vanskelig end tvingende , funktionel eller endda deklarativ programmering . Faktisk kan hver af disse programmeringsmodeller tilknyttes en samtidig version ved at udvide semantikken i det tilknyttede programmeringssprog. For eksempel er Prolog udvidet til Concurrent Prolog, Haskell med Concurrent Haskell, Java og Ada er objektsprog med primitiver til samtidighed  osv.

Specifikke teknikker til håndtering af samtidighed kan kategoriseres fra den mindst ekspressive (men nemmeste at bruge) til den mest ekspressive (og komplekse). Følgende niveauer kan bruges:

  1. Deklarativ samtidighed (udvidet funktionelt sprog med tråde);
  2. Konkurrence inden for logisk programmering;
  3. Erklærende konkurrence med havne og afsendelse af meddelelser;
  4. Konkurrer med porte og afsendelse af meddelelser;
  5. Konkurrencekrav med delt hukommelse.

Problemer

Det centrale fænomen indført ved samtidighed er følgende: i et ikke-samtidigt eller sekventielt program er rækkefølgen for udførelse af programmets elementære instruktioner en total rækkefølge, der forbliver den samme fra en udførelse til en anden for de samme inputparametre. I et samtidigt program danner udførelsen en delvis ordre. Da planlægning politik er generelt ukendt (det er bestemt af kernen af operativsystemet for eksempel) eller ukontrolleret, vi taler om indeterminisme af udførelsen orden.

De problemer, der fremkaldes af konkurrence, manifesterer sig i tilfælde af konkurrencedygtig og samarbejdsvillig konkurrence. På grund af den ubestemte udførelse kan adgang til data, der deles af konkurrerende enheder, føre til uoverensstemmelser i forholdet mellem disse data. Til dette har vi historisk brugt forskellige synkroniseringsprimitiver såsom mutexes , skærme eller semaforer . Disse forskellige primitiver er alle en mere eller mindre avanceret form for låsning, der bruges til at indstille synkroniseringen af ​​samtidige enheder (på en ressource eller mere generelt et kritisk afsnit). Men deres anvendelse er ikke uden vanskeligheder, der er især to store problemer:

Abstraktioner på højere niveau er blevet udviklet for at have udtryksevnen af ​​samtidighed uden ulemperne forbundet med anvendelse af lavt niveau synkroniseringsprimitiver.

Løsninger

For hver type samtidig programmering er abstraktioner på højt niveau tilgængelige for at lette skrivningen af ​​samtidige programmer.

I tilfælde af processer, der konkurrerer om delte ressourcer, blev begrebet transaktion udviklet i 1970'erne. Transaktionssystemer, der hovedsagelig bruges til delte databaser , er baseret på teorien om seriabilitet for at garantere adgang. Konkurrent til delte ressourcer (type 4 og 5 samtidighed ). Den software transaktionsbeslutning hukommelse (STM) er et forsøg på at anvende denne transaktion model mere generelt i enhver transaktion i hukommelsen, det har flere fordele i forhold til den traditionelle tilgang af låse og har for nylig oplevet en stor genopblussen af interesse.

I tilfælde af samarbejdsprocesser med henblik på et fælles mål har mindst to teknikker bevist deres værdi: kommunikation mellem processer, der udelukkende bruger afsendelse af meddelelser og dataflytssynkronisering , dvs. dynamisk planlægning af tråde i henhold til datatilgængelighed middel til specielle variabler af fremtidig type eller logisk variabel ). Erlang eller Oz programmeringssprog gør det muligt at skrive samtidige og distribuerede applikationer med særlig omhu til undtagelseshåndteringsproblemer . Erlang og Oz udnytter princippet om at sende meddelelser, og Oz tilbyder også dataflytssynkronisering .

Se også

Relaterede artikler