同時に10個までのjobを実行するように制御する方法とパイプラインについて
$ 1..100 | % { while ($(get-job -state running) -gt 10) { sleep-job 1 } start-job { # 実行したい処理を記載する } }
PowerShell 3.0のworkflowのparallelが使えると思っていたのですが、
どうも並列化させたい個数は指定できないようです。
また、parallelは並列化させたい入力コレクションの個数が多い場合、
一度、メモリ上に展開する必要があるようで実行が困難でした。
PowerShellのpipelineは、どのように動作するかわからなくなることがある。
使っている感じから、おそらく下記のように動作している。
<1の処理> | <2の処理>
上記のような場合、<1の処理>から結果が一つ出力されたら、
<1の処理>は中断され、<2の処理>が一つ目の出力に対して実行される。
<2の処理>が終了すると、<1の処理>が再開され、
以後、同様に繰り返される。