Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 运行空间和作业之间的性能差异_Multithreading_Powershell - Fatal编程技术网

Multithreading 运行空间和作业之间的性能差异

Multithreading 运行空间和作业之间的性能差异,multithreading,powershell,Multithreading,Powershell,我构建了一个文件处理器脚本来将一些文件转换为json。它可以工作,但速度不够快,所以我使用多线程。我更喜欢使用运行空间池,因为您可以指定一个最大线程限制,它将一次运行那么多线程,并在完成其他线程时添加新的工作,spiffy。但是我发现,如果我有,比如说,6个线程的工作要完成,使用运行空间需要约50分钟,并使我的计算机保持40%的CPU,而仅仅使用开始作业的每一项工作将使我的计算机保持100%的CPU,并且工作在15分钟内完成。我是否在某种程度上误解了runspacepool?下面是每种方法的简化

我构建了一个文件处理器脚本来将一些文件转换为json。它可以工作,但速度不够快,所以我使用多线程。我更喜欢使用运行空间池,因为您可以指定一个最大线程限制,它将一次运行那么多线程,并在完成其他线程时添加新的工作,spiffy。但是我发现,如果我有,比如说,6个线程的工作要完成,使用运行空间需要约50分钟,并使我的计算机保持40%的CPU,而仅仅使用开始作业的每一项工作将使我的计算机保持100%的CPU,并且工作在15分钟内完成。我是否在某种程度上误解了runspacepool?下面是每种方法的简化示例

### Using Start-Job ###

$files = C:\temp | Get-Childitem -filter '*.xel' # returns 6 items

foreach ($file in $files) {

    #simplified
    Start-Job -ScriptBlock { C:\temp\FileProcessor.ps1 -filepath $using:file.fullname }

}




### Using Runspace Pool ###

$files = C:\temp | Get-Childitem -filter '*.xel' # returns 6 items

$Code = {
    param ($filepath)

    #simplified
    C:\temp\FileProcessor.ps1 -filepath $filepath

}

$rsPool = [runspacefactory]::CreateRunspacePool(1,100)
$rsPool.Open()

$threads = @()

foreach ($file in $files) {

        $PSinstance = [powershell]::Create().AddScript($Code).AddArgument($file.FullName)
        $PSinstance.RunspacePool = $rsPool
        $threads += $PSinstance.BeginInvoke()    

}

while ($threads.IsCompleted -contains $False) {}

$rsPool.Dispose()

我也可能会误解运行空间与作业相比,欢迎任何帮助。谢谢大家!

作业使用多个进程