Multithreading PowerShell
PowserShellを使ったマルチスレッドをテストしてみました。
1秒から10秒までスリープするスレッド10個を同時に走らせています。
AddScript, AddArgmentによるパラメータ渡し、結果取得をイメージするため、2乗する演算をいれています。(手抜き感・・)
ソースは下記サイトにあるものを簡略化しました。
環境 : PSVersion 2.0 / Windows 7
$threads = 10 $scriptBlock = { Param ( [int]$num ) Start-Sleep -Seconds $num $res = New-Object PSObject -Property @{num=$num;num2=$num*$num} Return $res } $runspacePool = [RunspaceFactory]::CreateRunspacePool(1, $threads) $runspacePool.Open() $jobs = @() 1..10 | % { $job = 1::Create().AddScript($scriptBlock).AddArgument($_) $job.runspacePool = $runspacePool $jobs += New-Object PSObject -Property @{ num = $_ pipe = $job result = $job.BeginInvoke() } } ForEach ($job in $jobs) { $job.pipe.EndInvoke($job.result) }
結果が1行/1秒ごとに表示されるので、同時に走っていることが確認できます。
$threads数を絞ると、表示終了までにさらに時間がかかることも確認できます。
参考サイト : http://thesurlyadmin.com/2013/02/11/multithreading-powershell-scripts/