Az újraindítás-túrő képesség mellett a párhuzamos végrehajtás a másik fő előnye a workflow-k alkalmazásának. Nézzünk erre is néhány példát! Elsőként a foreach ciklus párhuzamos változatát:
workflow Parallel1 {
$filter = "a*", "w*"
foreach -parallel ($f in $filter){
Get-Process $f
}
}
Látható, hogy egy új, csak a workflow-kban elérhető képességgel bővült a foreach ciklus, ezt pedig a ‑parallel kapcsolóval tudjuk elérni. A futtatáskor látjuk, hogy az ’a’ és ’w’ betűvel kezdődő processzek vegyesen jelennek meg, azaz a foreach két etapja párhuzamosan fut:
PS C:\> Parallel1
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessNam PSCompute
e rName
------- ------ ----- ----- ----- ------ -- ---------- ---------
341 31 10564 22332 144 1,93 2244 wfcrun32 localhost
85 10 2608 5748 47 632 wininit localhost
255 21 11896 5148 103 55,90 10336 ActualM... localhost
119 9 4324 9048 56 16556 winlogon localhost
86 8 6564 9228 73 0,14 10380 ActualM... localhost
1144 71 116904 150304 608 782,98 15552 WINWORD localhost
136 11 10548 1492 83 2,76 12096 ActualM... localhost
82 8 1388 4244 42 1764 armsvc localhost
410 23 7568 16852 90 1484 wlanext localhost
167 12 4776 10900 66 2068 WmiPrvSE localhost
285 20 9012 12312 118 8128 wmpnetwk localhost
113 13 3748 10592 95 0,19 13848 WTGU localhost
A másik párhuzamosítási lehetőséget a parallel szkrtiptblokk használata jelenti. Egy ilyen blokkon belül minden tevékenység párhuzamosan fut, hacsak nem egy ilyen blokkon belül használunk egy sequence blokkot, mert az azon belüli tevékenységek megint sorban fognak végrehajtódni:
workflow Parallel2 {
parallel {
"egy - $(get-date)"
Start-Sleep 1
"kettő - $(get-date)"
Start-Sleep 1
sequence {
"három - $(get-date)"
Start-Sleep 1
"négy - $(get-date)"
Start-Sleep 1
}
}
}
Ebben a példában késleltetéseket tettem a sorok közé, így amikor az aktuális időt kiírom, láthtató, hogy vajon párhuzamos vagy soros volt-e a végrehajtás:
PS C:\> Parallel2
egy - 02/21/2015 17:39:29
kettő - 02/21/2015 17:39:29
három - 02/21/2015 17:39:29
négy - 02/21/2015 17:39:30
Az „egy”, „kettő” és vele együtt a „három” is egyszerre futott, viszont a „három” és „négy” között már volt időeltérés, hiszen ezek egymáshoz képest már sorosan futottak a sequence blokkban.
Ezekkel a lehetősékeggel precízen beállíthatjuk, hogy az egymásra épülő és nem épülő tevékenységek a lehető legoptimlisabban hajtódjanak végre.