Samtidig programmering

Den samtidige programmering er et programmeringsparadigme i betraktning, i et program, eksistensen av flere semantiske batterier som kan kalles tråder , prosesser eller oppgaver . De materialiseres i maskinen av en kjørestabel og et sett med private data.

Konkurranse er viktig når du vil skrive programmer som samhandler med den virkelige verden (som er en konkurrent) eller dra nytte av flere sentrale enheter (koblet, som i et flerprosessorsystem, eller distribuert, muligens i et rutenett eller klynge).

Klassifisering

Det er tre typer konkurranser:

Samtidig programmering er mer kompleks og vanskelig enn tvingende , funksjonell eller til og med deklarativ programmering . Faktisk kan hver av disse programmeringsmodellene knyttes til en samtidig versjon ved å utvide semantikken til det tilknyttede programmeringsspråket. For eksempel er Prolog utvidet til Concurrent Prolog, Haskell med Concurrent Haskell, Java og Ada er objektspråk med primitiver for samtidighet,  etc.

Spesifikke teknikker for å håndtere samtidighet kan kategoriseres fra den minst uttrykksfulle (men enkleste å bruke) til den mest uttrykksfulle (og komplekse). Følgende nivåer kan brukes:

  1. Deklarativ samtidighet (utvidet funksjonelt språk med tråder);
  2. Konkurranse innen logisk programmering;
  3. Deklarerende konkurranse med havner og sending av meldinger;
  4. Konkurransebehov med porter og sending av meldinger;
  5. Konkurransebehov med delt minne.

Problemer

Det sentrale fenomenet introdusert av samtidighet er følgende: i et ikke-samtidig eller sekvensielt program er rekkefølgen for utførelse av de elementære instruksjonene til programmet en total orden som forblir den samme fra en utførelse til en annen for de samme inngangsparametrene. I et samtidig program danner utførelsen en delvis ordre. Som planleggingspolitikk er generelt ukjent (det er bestemt av kjernen av operativsystemet for eksempel) eller ukontrollert, snakker vi om indeterminism for henrettelsen ordren.

Problemene som er forårsaket av konkurranse manifesterer seg i tilfeller av konkurransedyktig og samarbeidende konkurranse. På grunn av den ubestemte utførelsen kan tilgang til data som deles av konkurrerende enheter føre til inkonsekvenser i forholdet mellom disse dataene. For dette har vi historisk brukt forskjellige synkroniseringsprimitiver som mutexes , skjermer eller semaforer . Disse forskjellige primitivene er alle en mer eller mindre avansert form for låsing som brukes til å sette opp synkronisering av samtidige enheter (på en ressurs eller mer generelt en kritisk seksjon). Men bruken av dem er ikke uten vanskeligheter, det er spesielt to store problemer:

Abstraksjoner på høyere nivå er utviklet for å ha uttrykksfullhet av samtidighet uten ulempene knyttet til bruk av synkroniseringsprimitiver på lavt nivå.

Løsninger

For hver type samtidig programmering er abstraksjoner på høyt nivå tilgjengelig for å lette skrivingen av samtidige programmer.

Når det gjelder prosesser som konkurrerer om delte ressurser, ble begrepet transaksjon utviklet på 1970-tallet. Transaksjonelle systemer, som hovedsakelig brukes til delte databaser , er basert på teorien om seriabilitet for å garantere tilgang. Konkurrent til delte ressurser (type 4 og 5 samtidighet ). Den programvaren transaksjons minnet (STM) er et forsøk på å bruke denne transaksjonen modellen mer generelt i enhver transaksjon i minnet, har det flere fordeler fremfor den tradisjonelle tilnærmingen av låser og har nylig opplevd en stor oppblomstring av interesse.

Når det gjelder samarbeidsprosesser med tanke på et felles mål, har minst to teknikker vist seg å være verdt: kommunikasjon mellom prosesser som utelukkende bruker sending av meldinger, og dataflytsynkronisering , dvs. dynamisk planlegging av tråder i henhold til datatilgjengelighet (ved betyr spesielle variabler av fremtidig type eller logisk variabel ). Programmeringsspråk Erlang eller Oz gjør det mulig å skrive samtidige og distribuerte applikasjoner, med spesiell omhu gitt unntakshåndtering . Erlang og Oz utnytter prinsippet om å sende meldinger, og Oz tilbyr også dataflytsynkronisering .

Se også

Relaterte artikler