Egyidejű számítástechnika - Concurrent computing
Egyidejű computing egyik formája a számítástechnikai amelyben több számítások végrehajtása egyidejűleg szelenii átfedő időszakok, ahelyett sequentially- egy befejezése előtt a következő megkezdődik.
Ez egy rendszer tulajdonsága - legyen az program , számítógép vagy hálózat -, ahol minden folyamathoz külön végrehajtási pont vagy "vezérlési szál" tartozik. A párhuzamos rendszer olyan, ahol a számítás előrehaladhat anélkül, hogy megvárná az összes többi számítás befejezését.
A párhuzamos számítástechnika a moduláris programozás egyik formája . A paradigmájában az átfogó számítást részszámításokba veszik , amelyek egyidejűleg végrehajthatók. A párhuzamos számítástechnika úttörői közé tartozik Edsger Dijkstra , Per Brinch Hansen és a CAR Hoare .
Bevezetés
A párhuzamos számítástechnika fogalmát gyakran összetévesztik a párhuzamos számítástechnika kapcsolódó, de különálló fogalmával , bár mindkettőt úgy írhatjuk le, mint "több folyamatot , amelyek ugyanabban az időszakban futnak ". A párhuzamos számítástechnikában a végrehajtás ugyanazon a fizikai pillanatban történik: például egy többprocesszoros gép külön processzorain , a számítások felgyorsítása érdekében-a párhuzamos számítás lehetetlen egy ( egymagos ) egyetlen processzoron, mivel csak egy a számítás bármikor megtörténhet (egyetlen órajel ciklus alatt). Ezzel szemben a párhuzamos számítástechnika a folyamatok élettartamának átfedéséből áll , de a végrehajtásnak nem kell ugyanabban a pillanatban történnie. A cél itt a külvilág egyidejűleg zajló folyamatainak modellezése, például több ügyfél egyidejű elérése egy szerverhez. A több párhuzamos, kommunikáló részből álló szoftverrendszerek strukturálása hasznos lehet a komplexitás kezelésében, függetlenül attól, hogy az alkatrészek párhuzamosan végrehajthatók -e.
Például az egyidejű folyamatok végrehajthatók egy magon úgy, hogy az egyes folyamatok végrehajtási lépéseit időmegosztó szeleteken keresztül összeillesztik: egyszerre csak egy folyamat fut, és ha nem fejeződik be az időszelet alatt, akkor szüneteltetik , egy másik folyamat kezdődik vagy folytatódik, majd később az eredeti folyamat folytatódik. Ily módon több folyamat is félidőben hajtódik végre a végrehajtásban egyetlen pillanatban, de csak egy folyamat kerül végrehajtásra abban a pillanatban.
Egyidejű számítások lehet párhuzamosan futtatni, például, hozzárendelésével minden egyes folyamat, hogy egy külön processzor vagy processzor mag, vagy forgalmazó a számítás a hálózaton keresztül. Általában azonban előfordulhat, hogy a párhuzamos programozás nyelvei, eszközei és technikái nem alkalmasak az egyidejű programozásra, és fordítva.
A párhuzamos rendszerben a feladatok végrehajtásának pontos időzítése az ütemezéstől függ , és a feladatokat nem kell mindig párhuzamosan végrehajtani. Például két feladat, a T1 és a T2 alapján:
- A T1 végrehajtható és befejezhető a T2 előtt, vagy fordítva (soros és soros)
- A T1 és T2 végrehajtható felváltva (soros és párhuzamos)
- A T1 és T2 egyidejűleg végrehajtható ugyanabban az időpontban (párhuzamosan és párhuzamosan)
A "szekvenciális" szót az "egyidejű" és a "párhuzamos" antonimájaként használják; ha ezeket kifejezetten megkülönböztetik, akkor a párhuzamos/szekvenciális és a párhuzamos/soros ellentétes párokat használják. Azt az ütemezést, amelyben a feladatok egyenként hajtanak végre (sorozatosan, párhuzamosság nélkül), interleavelés nélkül (szekvenciálisan, nincs párhuzamosság: egyetlen feladat sem kezdődik el az előző feladat befejezéséig), soros ütemezésnek nevezzük . A sorozatosan ütemezhető feladatok sorozhatóak , ami leegyszerűsíti az egyidejűség ellenőrzését .
A párhuzamos programok tervezésének fő kihívása a párhuzamosság -ellenőrzés : a különböző számítási végrehajtások közötti interakciók vagy kommunikációk helyes sorrendjének biztosítása, valamint a végrehajtások között megosztott erőforrásokhoz való hozzáférés koordinálása. A lehetséges problémák közé tartoznak a versenykörülmények , a patthelyzetek és az erőforrások éhezése . Például vegye figyelembe a következő algoritmust a megosztott erőforrás által képviselt folyószámláról történő kivonáshoz balance:
bool withdraw(int withdrawal)
{
if (balance >= withdrawal)
{
balance -= withdrawal;
return true;
}
return false;
}
Tegyük fel balance = 500, hogy két párhuzamos szál hívja withdraw(300)és withdraw(350). Ha mindkét művelet 3. sora végrehajtódik az 5. sor előtt, akkor mindkét művelet azt találja, hogy balance >= withdrawalaz érték lesz true, és a végrehajtás folytatja a kivonási összeg levonását. Mivel azonban mindkét folyamat végrehajtja a kivonásait, a teljes kivont összeg végül meghaladja az eredeti egyenleget. A megosztott erőforrásokkal kapcsolatos ilyen jellegű problémák előnyösek az egyidejűség-szabályozás vagy a nem blokkoló algoritmusok használatából .
Előnyök
Az egyidejű számítástechnika előnyei a következők:
- Fokozott programáteresztő képesség - párhuzamos egyidejű program végrehajtása lehetővé teszi, hogy az adott idő alatt elvégzett feladatok száma arányosan növekedjen a processzorok számával Gustafson törvénye szerint
- Magas érzékenység a bemenetre/kimenetre-a bemeneti/kimeneti intenzív programok többnyire megvárják a bemeneti vagy kimeneti műveletek befejezését. A párhuzamos programozás lehetővé teszi azt az időt, amelyet egy másik feladatra való felhasználásra várva kell tölteni.
- Megfelelőbb programstruktúra-egyes problémák és problémakörök jól illeszkednek a párhuzamos feladatok vagy folyamatok megjelenítéséhez.
Modellek
Az 1962 -ben bevezetett Petri -hálók korai kísérletek voltak az egyidejű végrehajtás szabályainak kodifikálására. Az adatfolyam -elmélet később ezekre épült, és az adatfolyam -architektúrákat azért hozták létre, hogy fizikailag megvalósítsák az adatfolyam -elméletet. Az 1970 -es évek végétől kezdve olyan folyamatszámításokat fejlesztettek ki , mint a Kommunikációs Rendszerek Kalkulusa (CCS) és a Kommunikációs Szekvenciális Folyamatok (CSP), hogy lehetővé tegyék az algebrai érvelést az egymással kölcsönhatásban lévő komponensekből álló rendszerekről. A π-számítás hozzáadta a dinamikus topológiákkal kapcsolatos érvelés képességét.
A bemeneti/kimeneti automatákat 1987 -ben vezették be.
Olyan logikákat fejlesztettek ki, mint a Lamport TLA+ , valamint matematikai modelleket, például nyomvonalakat és Actor eseménydiagramokat , hogy leírják az egyidejű rendszerek viselkedését.
A szoftver tranzakciós memória az adatbázis -elméletből kölcsönzi az atomi tranzakciók fogalmát, és alkalmazza azokat a memória -hozzáférésekre.
Konzisztencia modellek
A párhuzamos programozási nyelveknek és a többprocesszoros programoknak konzisztencia -modellel kell rendelkezniük (más néven memóriamodell). A konzisztencia modell meghatározza a számítógép memóriájában végzett műveletek végrehajtásának és az eredmények előállításának szabályait .
Az egyik első konzisztencia modell volt Molnár Emma „s szekvenciális konzisztencia modell. A szekvenciális konzisztencia egy program tulajdonsága, hogy végrehajtása ugyanazokat az eredményeket hozza, mint a szekvenciális program. Pontosabban, egy program akkor következetes, ha "bármely végrehajtás eredménye ugyanaz, mintha az összes processzor műveleteit valamilyen sorrendben hajtották volna végre, és minden egyes processzor műveletei ebben a sorrendben jelennek meg a program által meghatározott sorrendben ".
Végrehajtás
Számos különböző módszer használható az egyidejű programok megvalósítására, például az egyes számítási végrehajtások végrehajtása operációs rendszer folyamatként , vagy a számítási folyamatok végrehajtása szálak halmazaként egyetlen operációs rendszer folyamatán belül.
Interakció és kommunikáció
Egyes párhuzamos számítástechnikai rendszerekben a párhuzamos komponensek közötti kommunikáció rejtve van a programozó előtt (pl. Határidős ügyletek használatával ), míg másokban ezt kifejezetten kell kezelni. Az explicit kommunikáció két osztályra osztható:
- Kommunikáció megosztott memóriával
- A párhuzamos komponensek a megosztott memóriahelyek tartalmának megváltoztatásával kommunikálnak (például Java és C# ). Ennek a párhuzamos programozási stílusnak általában szüksége van valamilyen zárolási módra (pl. Mutexek , szemaforok vagy monitorok ) a szálak közötti koordinációhoz. Egy olyan programot, amely ezek bármelyikét megfelelően végrehajtja, szálbiztosnak mondják .
- Az üzenet továbbítása kommunikáció
- A párhuzamos komponensek üzenetváltással kommunikálnak (például MPI , Go , Scala , Erlang és occam ). Az üzenetváltás történhet aszinkron módon, vagy használhat szinkron "találkozó" stílust, amelyben a feladó blokkolja az üzenet fogadását. Az aszinkron üzenetátadás megbízható vagy megbízhatatlan lehet (néha „küldés és imádkozás” néven is emlegetik). Az üzenetközvetítő párhuzamosságot sokkal könnyebb megfontolni, mint a megosztott memória párhuzamosságot, és általában a párhuzamos programozás robusztusabb formájának tekintik. Az üzenetátadó rendszerek megértéséhez és elemzéséhez számos matematikai elmélet áll rendelkezésre, beleértve a szereplő modellt és a különböző folyamatszámításokat . Az üzenetátadás hatékonyan megvalósítható szimmetrikus többfeldolgozással , megosztott memória gyorsítótár -koherenciával vagy anélkül .
A megosztott memória és az üzenettovábbítás párhuzamossága eltérő teljesítményjellemzőkkel rendelkezik. Jellemzően (bár nem mindig) a folyamatonkénti memória és a feladatváltás általános költsége alacsonyabb az üzenetátadó rendszerben, de az üzenetátadás költsége nagyobb, mint egy eljáráshívás esetén. Ezeket a különbségeket gyakran felülmúlják más teljesítménytényezők.
Történelem
A párhuzamos számítástechnika a vasútról és a távíróról szóló korábbi munkákból fejlődött ki , a 19. századból és a 20. század elejéről, és néhány kifejezés erre az időszakra datálódik, például a szemaforok. Ezek felmerültek annak a kérdésnek a megválaszolásához, hogy hogyan kell kezelni több vonatot ugyanazon a vasúti rendszeren (elkerülve az ütközéseket és maximalizálva a hatékonyságot), és hogyan kell kezelni a többszörös átvitelt egy adott vezetékkészleten keresztül (javítva a hatékonyságot), például időosztásos multiplexeléssel (1870-es évek) ).
A párhuzamos algoritmusok tudományos tanulmányozása az 1960 -as években kezdődött, Dijkstra (1965) szerint az első tanulmány ezen a területen, azonosítva és megoldva a kölcsönös kirekesztést .
Elterjedtség
A párhuzamosság elterjedt a számítástechnikában, az alacsony szintű hardverekről egyetlen chipen keresztül a világméretű hálózatokig. Példák következnek.
A programozási nyelv szintjén:
Operációs rendszer szinten:
-
Számítógépes multitasking , beleértve mind a kooperatív multitaskingot, mind a megelőző multitaskingot
- Időmegosztás , amely a feladatok szekvenciális kötegelt feldolgozását felváltotta egy rendszer egyidejű használatával
- Folyamat
- cérna
Hálózati szinten a hálózati rendszerek jellegüknél fogva általában párhuzamosak, mivel különálló eszközökből állnak.
Az egyidejű programozást támogató nyelvek
A párhuzamos programozási nyelvek olyan programozási nyelvek, amelyek nyelvi konstrukciókat használnak az egyidejűséghez . Ezek a konstrukciók magukban foglalhatják a többszálasodást , az elosztott számítástechnika támogatását , az üzenetek továbbítását , a megosztott erőforrásokat (beleértve a megosztott memóriát ) vagy a jövőket és ígéreteket . Az ilyen nyelveket néha párhuzam-orientált nyelvnek vagy párhuzam-orientált programozási nyelvnek (COPL) írják le.
Manapság a leggyakrabban használt programozási nyelvek, amelyek specifikus konstrukciókkal rendelkeznek a párhuzamosságra, a Java és a C# . Mindkét nyelv alapvetően megosztott memóriájú párhuzamossági modellt használ, a zárolást a monitorok biztosítják (bár az üzenettovábbító modelleket az alapul szolgáló megosztott memória modell tetején is meg lehet valósítani). Az üzenettovábbító párhuzamossági modellt használó nyelvek közül az Erlang jelenleg talán a legszélesebb körben használt az iparban.
Sok párhuzamos programozási nyelvet inkább kutatási nyelvként (pl. Pict ) fejlesztettek ki, nem pedig termelési célú nyelvként. Az olyan nyelvek, mint az Erlang , a Limbo és az occam azonban az elmúlt 20 évben különböző időpontokban voltak ipari használatban. A párhuzamos programozási lehetőségeket használó vagy biztosító nyelvek nem teljes listája:
- Ada - általános cél, natív támogatással az üzenetek továbbítására és monitor alapú párhuzamosságra
- Alef - egyidejű, szálakkal és üzenettovábbítással, a rendszerprogramozáshoz a Bell Labs 9. tervének korai verzióiban
- Alice - a Standard ML kiterjesztése , támogatja a párhuzamosságot határidős ügyleteken keresztül
- Ateji PX- kiterjesztés Java- ra párhuzamos primitívekkel π-számításból
- Axum- domain specifikus, párhuzamos, színészmodell és .NET Common Language Runtime alapján, C-szerű szintaxist használva
- BMDFM - bináris moduláris adatáramlási gép
- C ++ —std :: szál
- Cω (C omega) —kutatáshoz kiterjeszti a C# -ot , aszinkron kommunikációt használ
- C# - támogatja a párhuzamos számítást a zár, hozam használatával, az 5.0 -as aszinkronizálás és várás kulcsszavak óta
- Clojure - Lisp modern, funkcionális nyelvjárása a Java platformon
- Egyidejű tisztítás - funkcionális programozás, hasonló a Haskellhez
- Egyidejű gyűjtések (CnC) - Az adatáramlás és a vezérlés explicit meghatározásával valósítja meg a memóriamodelltől független implicit párhuzamosságot
- Egyidejű Haskell - lusta, tiszta funkcionális nyelv, amely párhuzamos folyamatokat működtet a megosztott memóriában
- Egyidejű ML - a szabványos ML egyidejű kiterjesztése
- Párhuzamos Pascal - Per Brinch Hansen
- curry
- D - multi-paradigma rendszer programozási nyelv explicit támogatását párhuzamos programozási ( színész modell )
- E —uses azt ígéri, hogy kizárja a patthelyzeteket
- ECMAScript - aszinkron műveletekre vonatkozó ígéreteket használ
- Eiffel - a SCOOP mechanizmusán keresztül, amely a Design by Contract koncepciókon alapul
- Elixir- dinamikus és funkcionális metaprogramozási nyelv, amely az Erlang VM-en fut.
- Erlang - aszinkron üzenetek továbbítását használja, semmi sem megosztva
- FAUST- valós idejű funkció, a jelfeldolgozáshoz a fordító automatikus párhuzamosítást biztosít OpenMP-n vagy egy speciális munkameglopó ütemezőn keresztül
- A Fortran - a coarrays és a párhuzamos a Fortran 2008 szabvány részét képezik
- Go - rendszerprogramozáshoz, párhuzamos programozási modellel, amely CSP -n alapul
- Haskell - egyidejű és párhuzamos funkcionális programozási nyelv
- Hume - funkcionális, párhuzamos, korlátozott tér- és időkörnyezetekhez, ahol az automatikus folyamatokat szinkroncsatorna -minták és üzenetátadás írja le
- Io- színész-alapú párhuzamosság
- Janus - a logikus változókra, zsákcsatornákra külön kérdezőket és mondókákat tartalmaz; tisztán deklaratív
- Java - szálosztály vagy futható felület
- Julia- "párhuzamos programozási primitívek: feladatok, aszinkron-várakozás, csatornák."
- JavaScript -Via web munkások , a böngésző környezetben, ígéretek , és visszahívások .
- JoCaml- egyidejű és elosztott csatorna alapú, az OCaml kiterjesztése , megvalósítja a folyamatok összeillesztési számítását
- Csatlakozzon a Java -hoz - egyidejűleg, Java nyelv alapján
- Joule- adatfolyam-alapú, üzenet továbbításával kommunikál
- Joyce - párhuzamos, tanítás, a Concurrent Pascal -ra épül , Per Brinch Hansen CSP funkcióival
- LabVIEW - grafikus, adatfolyam, függvények a gráf csomópontjai, az adatok vezetékek a csomópontok között; objektum-orientált nyelvet tartalmaz
- Limbo - az Alef rokona , az Inferno (operációs rendszer) rendszerprogramozásához
- MultiLisp - A sémaváltozat kiterjesztve támogatja a párhuzamosságot
- Modula-2-a rendszer programozásához N. Wirth, Pascal utódja, natív támogatással a coroutines számára
- Modula-3- az Algol család modern tagja, szálak, mutexek és állapotváltozók széles körű támogatásával
- Newsqueak- kutatás, a csatornák első osztályú értékei; Alef elődje
-
occam - erősen befolyásolja a szekvenciális folyamatok kommunikációja (CSP)
- occam-π- az occam modern változata , amely Milner π-számításából származó ötleteket foglal magában
- Ork - erősen párhuzamos, nem determinisztikus, Kleene algebra alapján
- Oz-Mozart- többparadigmás, támogatja a megosztott állapotú és üzenetközvetítő párhuzamosságot és a határidős ügyleteket
- ParaSail- objektum-orientált, párhuzamos, mutatóktól és versenyfeltételektől mentes
- Pict -essentially egy futtatható végrehajtása Milner π-kalkulus
- A Raku alapértelmezés szerint szálakat, ígéreteket és csatornákat tartalmaz
- Python- szál-alapú párhuzamosságot és folyamat-alapú párhuzamosságot használ
- Reia- aszinkron üzeneteket használ a megosztott semmi objektumok között
- Piros/Rendszer - rendszerprogramozásra, Rebol alapján
- Rozsda-a rendszer programozásához, üzenetátvitel, mozgatási szemantika, megosztott, megváltoztathatatlan memória és megosztott, módosítható memória használatával.
- Scala- általános cél, amelynek célja a gyakori programozási minták tömör, elegáns és típusbiztonságos kifejezése
- SequenceL- általános célú funkcionális, fő tervezési célok a könnyű programozás, a kód egyértelműsége és olvashatósága, valamint az automatikus párhuzamosítás a többmagos hardverek teljesítménye érdekében, és bizonyosan versenyfeltételektől mentesek
- SR - kutatáshoz
- SuperPascal - egyidejű tanítás, Per Brinch Hansen párhuzamos Pascal és Joyce alapján
- Unicon - kutatáshoz
- TNSDL - a távközlési csereközpontok fejlesztéséhez aszinkron üzenetátvitelt használ
- VHSIC hardverleíró nyelv ( VHDL )-IEEE STD-1076
- XC -concurrency-kiterjesztett részhalmaza C nyelv által kifejlesztett XMOS alapján kommunikál szekvenciális folyamatok , beépített konstrukciók programozható I / O
Sok más nyelv támogatja a párhuzamosságot könyvtárak formájában, a fenti listával nagyjából összehasonlítható szinten.
Lásd még
- Aszinkron I/O
- Chu tér
- Folyamat-alapú programozás
- Java ConcurrentMap
- A párhuzamos, párhuzamos és elosztott számítástechnika fontos publikációinak listája
- Ptolemaiosz -projekt
- Versenyfeltétel § Számítástechnika
- Köteg (matematika)
- Tranzakciók feldolgozása
Megjegyzések
Hivatkozások
Források
- Patterson, David A .; Hennessy, John L. (2013). Számítógép -szervezés és -tervezés: A hardver/szoftver interfész . A Morgan Kaufmann sorozat a számítógépes építészetben és tervezésben (5 szerk.). Morgan Kaufmann. ISBN 978-0-12407886-4.
További irodalom
- Dijkstra, EW (1965). "Probléma megoldása a párhuzamos programvezérlésben". Az ACM kommunikációja . 8. (9): 569. doi : 10.1145/365559.365617 . S2CID 19357737 .
- Herlihy, Maurice (2008) [2008]. A többprocesszoros programozás művészete . Morgan Kaufmann. ISBN 978-0123705914.
- Downey, Allen B. (2005) [2005]. A kis szemaforok könyve (PDF) . Zöld tea sajtó. ISBN 978-1-4414-1868-5. Archiválva az eredetiből (PDF) , 2016-03-04 . Letöltve: 2009-11-21 .
- Filman, Robert E .; Daniel P. Friedman (1984). Koordinált számítástechnika: Eszközök és technikák az elosztott szoftverekhez . New York: McGraw-Hill. o. 370 . ISBN 978-0-07-022439-1.
- Leppäjärvi, Jouni (2008). Pragmatikus, történelmileg orientált felmérés a szinkronizációs primitívek egyetemességéről (PDF) . Oulu Egyetem.
- Taubenfeld, Gadi (2006). Szinkronizációs algoritmusok és párhuzamos programozás . Pearson / Prentice Hall. o. 433. ISBN 978-0-13-197259-9.
Külső linkek
-
A Wikimedia Commons párhuzamos programozásával kapcsolatos média - Egyidejű rendszerek virtuális könyvtára