A q programozási nyelv

Párhuzamosság

Szintaxis

A q korlátozott formában támogatja a párhuzamosságot. Ennek igénybe vételéhez a q interpretert feldolgozó szálkészlettel (thread pool) kell elindítanunk. A szálak számát a "-s" parancssori paraméterrel adhatjuk meg:

C:\q\w32> q -s 4

A szálak számát lekérdezhetjük a \s paranccsal, de nem módosíthatjuk:

\s 4 \s 8 '-s command line only

Ha vannak rendelkezésre álló szálaink, akkor a párhuzamos feldolgozást a ': (each prior) módosítószó egyparaméteres függvényre való alkalmazásával indíthatjuk el. Szinonimaként használhatjuk a "peach" függvényt is. Ebben a formában a függvény szemantikája az "each" függvényével egyezik meg, de a műveletet az interpreter elosztja a feldolgozó szálak között. Ha többprocesszoros gépünk van, erről meg is győződhetünk, ha végrehajtunk egy hosszabb műveletet és lemérjük a végrehajtás idejét.

\t {sum exp x?1.0} each 2#1000000 / párhuzamosítás nélkül 123 \t {sum exp x?1.0} peach 2#1000000 / párhuzamosítással 86

A q-ban nincsen szinkronizáció. A feldolgozó szálakban futó függvények nem adhatnak értéket globális változónak, a paraméterek és visszatérési értékek pedig másolásra kerülnek, hogy ne legyen versengés a szálak között. Az I/O műveleteknél nekünk kell gondoskodnunk arról, hogy a különböző szálak ne használják ugyanazt a handle-t olvasásra vagy írásra, különben az inputon vagy outputon szemét keletkezhet. Továbbá a szálakban nem nyithatunk meg vagy zárhatunk be handle-öket.