A ChucK lehetővé teszi több folyamat egyidejű futtatását (a folyamatok úgy viselkednek, mintha párhuzamosan futnának). A folyamat ChucKi megfelelője a shred. Egy shred "spork"-olása a virtuális gépen új folyamat indítását jelenti.
A ChucK az időkezelő mechanizmuson keresztül a minta-szinkronizált, nem-preemptív párhuzamosságot támogatja. Időzítések segítségével tetszőleges számú program/shred automatikusan ütemezhető és szinkronizálható. A "minta-szinkronizált" párhuzamosság annyit tesz, hogy a folyamatok közötti időzítés minták szintjén garantáltan precíz. Fontos megjegyezni, hogy a folyamatoknak/shredeknek nem kell tudniuk egymásról, az időt helyileg kezelik. A virtuális gép biztosítja a helyes működést magasabb szinten. Végül a párhuzamosság az időzítéshez hasonlóan determinisztikus a ChucKban.
A legegyszerűbb mód több shred egyidejű futtatására, ha a parancssoron megadjuk őket:
A fenti parancs a foo.ck, bar.ck és boo.ck fájlokat futtatja egyidejűleg.
Shred elágaztatására a spork
kulcsszó/operátor használható:
spork
új shredet indít a virtuális gépen egy függvényhívásból kiindulva.
spork
minta-szinkronizált, az új shred azonnal ütemezésre kerül.
spork
-olása visszaad egy referenciát az új shredre. Fontos megjegyezni,
hogy a függvény visszatérési értéke nem lesz elérhető, ez a szolgáltatás később lesz implementálva.
Egy kicsit hosszabb példa:
me
kulcsszó
A me
kulcsszó (Shred
típusú pszeudováltozó) referencia az aktuális shredre.
Néha hasznos az aktuális shredet felfüggesztése az idő léptetése nélkül más shredek futását lehetővé téve. Erre való a me.yield(). Gyakran hasznos sporkolás után rögtön megválni a vezérléstől, így más shredeknek lehetőséget adni a futásra az idő léptetése nélkül.
Hasznos lehet kilépni az aktuális shredből.
Le lehet kérdezni a shedek azonosítóját:
Ezen föggvényekkel minden shred rendelkezik, de a yield()
-et és exit()
-et általában csak
az aktuális shredre használják.
machine.add()
használata
A machine.add( string path )
elindítja a path-ban megadott ChucK programot.
A spork ~
-mal ellentétben nem lesz szülő-gyerek viszony az új és a hívó
shred között. Hasznos előre megírt programok dinamikus indítására.
Jelenleg a visszatérési értéke az új shred azonosítója, és nem referencia a shredre. Ez a viselkedés később valószínűleg változni fog.
Hasonlóan, shredeket el is lehet távolítani a virtuális gépből.
Azonos fájlból indított shredek osztoznak a globális változókon. Az időt és eseményeket használhatják a szinkronizációhoz. Különböző fájlokból indított shredek is osztozhatnak adatokon, jelenleg erre egy nyilvános osztály statikus adattagjai használhatóak. Ez a megoldás hamarosan javításra kerül!