Samtidighet (datavetenskap)

förmågan att delar i ett program kan köras i valfri ordning utan att resultatet påverkas

Inom datavetenskap hänvisar samtidighet (engelska: concurrency) till förmågan att olika delar eller enheter i ett program, en algoritm eller ett problem kan exekveras i oordning eller i en delvis bestämd ordning utan att resultatet påverkas. Detta gör det möjligt att köra de samtidiga enheterna parallellt, vilket märkbart kan förbättra den övergripande körhastigheten hos system med flera processorer eller flera kärnor.[1]

"Ätande filosofer", ett klassiskt problem som involverar samtidighet såväl som delade resurser.

Historik redigera

Som Leslie Lamport (2015) noterade, "Medan samtidig programkörning har studerats i åratal presenterades samtidighet inom datavetenskap i Edsger Dijkstras rapport från 1965 där han introducerade problemet med ömsesidig uteslutning (engelska: mutual exclusion). [...] Under de följande decennierna växte intresset för samtidighet – speciellt för distribuerade system. När man tittar tillbaka på områdets ursprung, är det Edsger Dijkstras centrala roll som sticker ut".[2]

Problem redigera

Eftersom beräkningarna i ett samtidigt system kan interagera med varandra under körning, kan antalet möjliga körningssätt i systemet bli riktigt stort, vilket medför att det inte alltid går att säga vad resultatet kommer att bli. Samtidig användning av delade resurser kan vara ett upphov till tidigare nämnd obestämdhet, vilket leder till problem som baklås och resurssvält.[3]

Att designa samtidiga system innebär ofta att man måste hitta tillförlitliga tekniker för att koordinera dess körning, datautväxling, minnesallokering och körningsschema för att minimera responstiden och maximera kapaciteten.[4]

Teori redigera

Samtidighetsteori har varit ett aktivt forskningsområde inom teoretisk datavetenskap. Ett av de första förslagen var Carl Adam Petris arbete med petrinät i början på 1960-talet. Sedan dess har många olika formalismer utvecklats i syfte att modellera och diskutera samtidighet.

Se även redigera

Referenser redigera

Den här artikeln är helt eller delvis baserad på material från engelskspråkiga Wikipedia.
  1. ^ Lamport, Leslie (July 1978). ”Time, Clocks, and the Ordering of Events in a Distributed System”. Communications of the ACM 21 (7): sid. 558–565. doi:10.1145/359545.359563. http://research.microsoft.com/en-us/um/people/lamport/pubs/time-clocks.pdf. Läst 4 februari 2016. 
  2. ^ Lamport, Leslie. ”Turing Lecture: The Computer Science of Concurrency: The Early Years (Communications of the ACM, Vol. 58 No. 6, June 2015)”. http://cacm.acm.org/magazines/2015/6/187316-turing-lecture-the-computer-science-of-concurrency/fulltext. Läst 22 mars 2017. 
  3. ^ Cleaveland, Rance; Scott Smolka (December 1996). ”Strategic Directions in Concurrency Research”. ACM Computing Surveys 28 (4): sid. 607. doi:10.1145/242223.242252. 
  4. ^ Campbell, Colin; Johnson, Ralph; Miller, Ade; Toub, Stephen (August 2010). Parallel Programming with Microsoft .NET. Microsoft Press. ISBN 978-0-7356-5159-3. http://msdn.microsoft.com/en-us/library/ff963542.aspx. Läst 12 mars 2019 

Externa länkar redigera