Foreach-Parallel

PowerShell parallel并行处理 10


在PowerShell中,可以通过后台Job来达到并行的目的。但是有些情况下,Job用起来并不方便,比如有一个文本文件,里面有几十万个链接,要求下载这些链接中的资源。这必须要用到并行处理,但是你不可能开十几万个Job同时处理,机器的性能不允许,网络带宽也不允许,那多少个Job才合适呢?5个还是10个?事实上,这个问题不应当交给用户去思考。

在.NET中,有Parallel.For 和 Parallel.ForEach,在PowerShell中也有Parallel。切看下面的例子,两个简单的循环,每次循环中,Sleep 50毫秒来模拟执行任务。前者Test-workflow为并行循环,后者Test-function为顺序函数。然后让设定循环分别为50,100,500,1000,5000来测试效率。

#并行工作流
workflow Test-workflow
{
    param([int]$num)
    foreach -parallel ($item in 1..$num)
    {
        sleep -Milliseconds 50
    }

}
#顺序函数
function Test-function
{
    param([int]$num)
    1..$num | foreach {
        sleep -Milliseconds 50
    }
}
#测试脚本
foreach ($loop in 50,100,500,1000,5000) { 
$work = ( Measure-Command -Expression { Test-workflow -num $loop } ).TotalSeconds
$func = ( Measure-Command -Expression { Test-function -num $loop } ).TotalSeconds

"数据量={0},顺序执行={1},并行执行={2}" -f $loop,$func,$work
}

输出:

数据量=50,顺序执行=3.1173647,并行执行=0.4106994
数据量=100,顺序执行=6.2382128,并行执行=0.7431548
数据量=500,顺序执行=31.2459768,并行执行=1.9244321
数据量=1000,顺序执行=62.4976644,并行执行=3.7015623
数据量=5000,顺序执行=312.4902384,并行执行=16.5361578

对输出稍微在Excel中对比后,发现数据量越大,越能体现出并行的优势:

Foreach-Parallel

Foreach-Parallel

本文链接: https://www.pstips.net/powershell-parall.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

10 条评论 “PowerShell parallel并行处理