or1ko's diary

日々を書きます

同時に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の処理>が再開され、
以後、同様に繰り返される。