Tevékenységek párhuzamos és soros végrehajtása

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.



Word To HTML Converter