Érdekes

Bell Labs és CSP Szálak

Eredetileg egy https://swtch.com/~rsc/thread/.

Russ Cox
rsc@swtch.com

Bevezetés

Ez az oldal egy szelet a történelem, párhuzamos programozás, különös tekintettel egy bizonyos törzse Hogy ez a nyelv a kommunikáció szekvenciális folyamatok (CSP) [1] [1a]. Párhuzamos programozás ez a stílus érdekes okok miatt nem a hatékonyság, hanem világosság. Ez egy széles körben elterjedt tévedés, hogy csak a párhuzamos programozás, mint azt, hogy a teljesítmény növelése, például, hogy átfedés lemez i/O kérések, hogy csökkenti a késleltetést által prefetching eredmények várható lekérdezések, vagy, hogy kihasználják a több processzor. Ilyen előnyök is fontos, de nem lényeges, hogy ez a vita. Végtére is, hogy lehet, hogy más stílus, mint az aszinkron esemény-vezérelt programozás. Ehelyett, mi érdekli a párhuzamos programozás, mert ez biztosítja a természetes absztrakció, hogy lehet, hogy egyes programok sokkal egyszerűbb.

Mi ezt nem

A legtöbb számítógép-tudomány hallgatók kénytelen olvasni Andrew Birrell ki az ott a “Bevezetés a Programozási a Szálak.” A SRC szálak modell ezt használja a legtöbb szál csomagok jelenleg elérhető. A probléma ezekkel az, hogy túl alacsony szintű. Ellentétben a kommunikációs primitív által biztosított, Hogy a primitívek az SRC-stílus threading modul kell kombinálható más technikákkal, általában megosztott memória, annak érdekében, hogy hatékonyan alkalmazni. Általánosságban, a programozók általában nem építik a saját magasabb szintű konstrukciók, bal frusztrálja, hogy erre figyelni, hogy ilyen alacsony szintű részleteket.

A pillanat, nyomja meg Birrell ki az ott bemutató elment az esze. Ez egy másik szál modell. Ha megközelítés, mint egy másik szál modell, majd rájössz, hogy sokkal könnyebb megérteni.

Kommunikáció Szekvenciális Folyamatok

1978-ra, sok volt a javasolt módszerek használata a kommunikáció, a szinkronizálás összefüggésben programozási multiprocessors. Osztott memória volt a leggyakoribb kommunikációs mechanizmus, szemaforok, kritikus régiók, valamint a monitorok között voltak a szinkronizáló mechanizmusok. C. A. R. Hogy a címzett mindkét kérdés egy egységes nyelv primitív: szinkron kommunikáció. Az Hogy van CSP nyelv, folyamatok kommunikálni, hogy küld vagy fogad értékek a neve nem pufferelt csatornák. Mivel a csatorna nem pufferelt, a küld művelet blokkok, amíg az érték átkerült egy vevő, ezáltal egy mechanizmus a szinkronizálás.

Az egyik, Hogy van példa, hogy a formázás 80-oszlop kártya nyomtatás 125-oszlop nyomtató. A megoldás, egy folyamat olvas egy kártyát egy időben, elküldi a szétszerelt tartalom karakterenként egy másik folyamat. Ez a második folyamat összegyűjti csoportok 125 karaktereket küld a csoportokat, hogy a vonal nyomtató. Ez úgy hangzik, triviális, de mivel nem pufferelt I/O könyvtárak, a szükséges könyvelési részt vett egy egységes folyamat megoldás nehézkes. Sőt, pufferelt I/O könyvtárak tényleg csak encapsulations e két fajta folyamatok export az egyetlen-karakter kommunikációs interfész.

Egy másik példa, Hogy melyik kredit, hogy Doug McIlroy, úgy a generáció minden prímszám kevesebb, mint ezer. Eratoszthenész szitája lehet szimulálni egy csővezeték folyamatok végrehajtó a következő pszeudokód:

p = get a number from left neighbor
print p
loop:
    n = get a number from left neighbor
    if (p does not divide n)
        send n to right neighbor

Egy generáló folyamat lehet etetni a számok, 2, 3, 4, …, 1000 a bal végén a csővezeték: az első folyamat a sorban megszünteti a többszöröse 2, a második megszünteti a többszöröse 3, a harmadik megszünteti a többszöröse 5, stb:

A lineáris vezeték természet, a példák eddig az misrepresentative az általános jellege CSP-t, de még korlátozott lineáris vezetékek, a modell elég erős. A hatalom már erőteljesen bizonyítja az a siker a szűrő-csővezeték megközelítés, amely a Unix operációs rendszer jól ismert, [2] Sőt, csővezetékek régebbi Hogy van papír. A belső Bell Labs-én kelt feljegyzés október 11-én, 1964, Doug McIlroy játszogattam ötletek, hogy lesz Unix csővezetékek: “Meg kellett volna valamilyen módon a csatlakozó programok, mint a kert slaggal. csessze meg egy másik szegmens, amikor szükségessé válik, hogy a masszázs az adatok más módon. Ez az út a IO is.” [3]

Hogy kommunikál folyamatok általánosabb, mint a tipikus Unix shell csővezetékek, mivel csatlakoztatható tetszőleges mintákat. Tény, Hogy ad például egy 3×3-as mátrix folyamat kissé olyan, mint a prime-szita, hogy lehet használni, hogy szaporodnak a vektor egy 3×3 négyzetes mátrix.

Persze, a Unix cső mechanizmus nem igényel, a lineáris elrendezés; csak a shell szintaxis. McIlroy jelentések játszik a szintaxis egy shell általános vízvezeték korán, de nem tetszik, hogy a szintaxis ahhoz, hogy végrehajtani (személyes közlés, 2011). Később kagyló támogattam egy korlátozott formája a nem-lineáris vezetékek. Rochkind van 2dsh támogatja dags; Tom Duff rc támogatja a fák.

Hogy ez a nyelv újszerű, befolyásos, de hiányzik néhány fontos szempontot. A fő hiba, hogy a nem pufferelt használt kommunikációs csatornák nem első osztályú objektumok: nem lehet tárolt változók, telt, mint érvek funkciók, vagy küldött az egész csatorna. Ennek eredményeként, a kommunikációs struktúra kell rögzíteni, míg a program megírása. Ezért meg kell írni egy programot, hogy a nyomtatás az első 1000 fővezérek ahelyett, hogy az első n prímszám, hogy szaporodnak a vektor egy 3×3-as mátrix, mint inkább egy nxn mátrix.

Pan, Promela

1980-ban, alig két évvel azután, Hogy papír, Gerard Holzmann, Rob Pike létre egy protokoll analizátor úgynevezett pan, hogy vesz egy CSP nyelvjárás, mint a bemeneti. Pán CSP dialektus volt így, a kiválasztás, a hurok, de nem változó. Még így is, Holzmann a jelentések, hogy a “Pan megtalálta az első hiba a Bell Labs-adatok-kapcsoló control protocol November 21-én 1980. “[14]. Azt a dialektust is már az első CSP nyelv a Bell Labs, de az biztos, feltéve, hogy a Csuka a tapasztalatok felhasználásával, valamint a végrehajtási egy CSP-mint a nyelv, az első a sok közül.

Holzmann protokoll analizátor fejlődött a Spin-modell-ellenőrző, illetve annak Promela nyelv, melyhez első osztályú csatornák, ugyanúgy, mint Newsqueak (világbajnokságot).

Newsqueak

Mozgó más irányba, Luca Cardelli, Rob Pike kidolgozott ötletek CSP be a Vinnyog mini-nyelv [4] generáló felhasználói felület kód. (Ez a Vinnyog különbözik a Vinnyog Smalltalk végrehajtás.) Pike később bővült Nyikorog a teljes értékű programozási nyelv Newsqueak [5][6], amely nemzettek Plan 9 Alef [7] [8], Limbo [9], valamint a Google Go [13]. A fő szemantikai előnye, hogy Newsqueak át Vinnyog, hogy Newsqueak kezeli a kommunikációs csatornák, mint első osztályú objektumok: ellentétben a CSP, Vinnyog, csatorna tárolható változók, telt, mint érvek funkciók, majd elküldte az egész csatorna. Ez viszont lehetővé teszi, hogy a programadó építése a kommunikációs struktúra, ezáltal lehetővé téve, hogy a teremtés a komplex struktúrák, mint lenne ésszerű tervezés kézzel. Különösen, Doug McIlroy bizonyította, hogy a kommunikációs lehetőségek a Newsqueak lehet alkalmazni kell írni elegáns programok manipulálja a szimbolikus hatalom sorozat [10]. Hasonló kísérletek a hagyományos nyelvek általában mire a könyvelés. Hasonlóképpen, Rob Pike bizonyította, hogy a kommunikációs felületeken lehet alkalmazni, hogy kitör a közös esemény-alapú programozási modell, írásban, egyidejűleg ablak rendszer [11].

Alef

Alef [7] [8] a nyelv által tervezett Phil Winterbottom kell alkalmazni a Newsqueak ötlet, hogy egy teljes értékű rendszerek programozási nyelv. Alef két típusa van, amit mi már hív folyamatok: procs, szálak. A programot szervezett egy vagy több procs, amelyek megosztott memória operációs rendszer folyamatok lehet megelőzésképpen tervezett. Minden proc tartalmaz egy vagy több olyan feladatok, amelyek együttműködve tervezett coroutines. Vegye figyelembe, hogy egyes feladatokhoz rendelt egy adott proc: nem vándorolnak között procs.

A fő felhasználási területe procs nyújtson kontextusokban, hogy blokkolja az I/O-függetlenül a fő feladata. (Plan 9-nincs válasszuk a hív lehetőséget, majd még a Unix kell több procs ha azt szeretné, hogy az átfedés számítás, nem-hálózati I/O.) Acme papír [12] van egy szép rövid vita procs, szálak, mint a jegyzet a Plan 9-ablak rendszer is alább.

Limbo

A Pokol operációs rendszer egy Terv 9 álarcos bűnüldöző oldalán, akit szánt set-top boxok. A programozási nyelv, Limbó [9], hatott az Alef. El közötti különbséget procs, feladatok, hatékonyan, hogy csak procs, bár voltak kisebb súlyú, mint amit a legtöbb ember gondol, mint a folyamatok. Minden párhuzamosság a megelőző. Érdekes, hogy annak ellenére, hogy ez a nyelv nem nyújt valódi támogatást zár. Ehelyett, a csatorna kommunikációs általában elég a szinkronizálást, valamint ösztönzi a programozók, hogy gondoskodjon, hogy mindig van egy tiszta tulajdonos minden adat. Explicit zárolás szükségtelen.

Libthread

Vissza a plan 9-világ, az Alef fordító kiderült, hogy nehéz fenntartani, mint a plan 9 volt, nekiláttak, hogy egyre több architektúrák. Libthread eredetileg port Alef programok C, így az Alef fordítók lehet nyugdíjas is. Alef – procs, feladatok úgynevezett procs, szálak libthread. A man oldalt a végleges referencia.

Go

Rob Pike, Ken Thompson költözött a Google forgalomba helyezett, CSP középpontjában a Go nyelv konkurens támogatást.

Az Első Lépések

Érezni a modell, főleg, hogy a folyamatok szálak befolyásolja, érdemes elolvasni az Alef Felhasználói Útmutató [8]. Az első harminc diák ez a bemutató jó bevezetést Alef konstrukciók képviselteti magát C.

A legjobb példa arra, hogy a hatalom a CSP-modell vagy McIlroy, Pike papírokat, a fent említett [10] [11].

Rob Pike haza oldalon található jegyzetek a kurzus párhuzamos programozás: bevezetés, a diák a két fent említett papírok: bandzsák, ablak rendszer. Az utolsó három jó példa arra, hogy hogyan Terv 9 programok jellemzően a procs, feladatok.

Rob Pike adott tech beszélni a Google, amely a jó bevezetés (57 perces videó).

Rob Pike fele a 2010-es Google  I/O beszélni Russ Cox megmutatja, hogyan kell használni csatornák and Go konkurens, hogy végre egy terheléselosztás munka irányítási rendszer.

Kapcsolódó Források

John Reppy alkalmazta ugyanaz az ötlet, hogy ML, termelő Egyidejű ML. Használta CML építeni, többek között, a eXene többszálú (nem-esemény-vezérelt) X Window Rendszer toolkit.

Hivatkozások

[1] C. A. R. Hoare, “Communicating Sequential Processes,” Communications of the ACM 21(8) (August 1978), 666-677.

[1a]C. A. R. Hoare, Communicating Sequential Processes. Prentice Hall, Englewood Cliffs, New Jersey, 1985.

[2] Michael S. Mahoney, ed., The Unix Oral History Project, Release 0: The Beginning

[3] M. Douglas McIlroy, internal Bell Labs memorandum, October 1964.

[4] Luca Cardelli and Rob Pike, “Squeak: a Language for Communicating with Mice,” Computer Graphics, 19(3) (July 1985: SIGGRAPH ’85 Proceedings), 199-204.

[5] Rob Pike, “The Implementation of Newsqueak,” Software–Practice and Experience, 20(7) (July 1990), 649-659.

[6] Rob Pike, “Newsqueak: a Language for Communicating with Mice,” Computing Science Technical Report 143, AT&T Bell Laboratories, Murray Hill, 1989.

[7] Phil Winterbottom, “Alef Language Reference Manual,” in Plan 9 Programmer’s Manual: Volume Two, AT&T, Murray Hill, 1995.

[8] Bob Flandrena, “Alef Users’ Guide,” in Plan 9 Programmer’s Manual: Volume Two, AT&T, Murray Hill, 1995.

[9] Dennis M. Ritchie, “The Limbo Programming Language,” in Inferno Programmer’s Manual, Volume 2, Vita Nuova Holdings Ltd., York, 2000.

[10] M. Douglas McIlroy, “Squinting at Power Series,” Software–Practice and Experience, 20(7) (July 1990), 661-683.

[11] Rob Pike, “A Concurrent Window System,” Computing Systems, 2(2) 133-153.

[12] Rob Pike, “Acme: A User Interface for Programmers,” Proceedings of the Winter 1994 USENIX Conference, 223-234.

[13] golang.org, “The Go Programming Language”.

[14] Gerard Holzmann, “Spin’s Roots”.

[15] Gerard Holzmann, “Promela Language Reference”.

Menj a honlapon http://www.forallworld.com.

Leave a Reply