gpt4 book ai didi

powershell - 使用 Powershell 作业、运行空间或工作流时,线程是否在不同的内核上执行?

转载 作者:行者123 更新时间:2023-12-03 12:39:08 26 4
gpt4 key购买 nike

当使用 Powershell 作业、运行空间或工作流时,线程是否在不同的内核上执行? (如果是这样,我们如何告诉 powershell 使用多少个内核?——抱歉,这是 2 个问题。)

.Net 具有任务并行库,它允许使用所有可用内核 (here is one example) 并行运行“for 循环”。 Powershell 作业、运行空间或工作流是否做类似的事情?类似地,我的意思是线程实际上是在不同的内核上并行运行的吗?

我发现了一个类似的问题here ,但似乎不清楚(无论如何对我来说)线程是否在单独的内核上执行。好像有时候多线程会被误认为是并行,提到了here .

如果无法通过 Powershell 使用多核,我会使用 C# 或 Python,但我的第一选择是使用 Powershell,因为(插入一长串原因)。

如果它是相关的,我正在尝试做所有这一切来帮助一位从事服务器管理员类型工作的同事。目前,他的 powershell 脚本循环遍历服务器列表,并为每个服务器做一些事情。目前该脚本在 8 核机器上运行,但只使用一个核。我确信还有其他方法可以提高性能,但并行执行是我当前的目标。

最佳答案

如果您所说的独立内核是指逻辑内核(而不是物理内核),我会说是的。运行这样的程序并注意“$num”的输出。 $num 表示线程正在运行的当前逻辑(非物理)内核。如果此脚本在双核计算机(具有 4 个逻辑核)上运行,则 $num 的输出为 0、1、2 或 3。参见 here以获得关于逻辑 CPU 与物理 CPU 的更好解释。

$sb = {
param($sbarg)
$MethodDefinition = @'
[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
public static extern int GetCurrentProcessorNumber();
'@

$Kernel32 = Add-Type -MemberDefinition $MethodDefinition -Name 'Kernel32' -Namespace 'Win32' -PassThru

0..10 | % {
$num = $Kernel32::GetCurrentProcessorNumber()
Write-Output "[$sbarg]:[$_] on '$num'"

# simulate some work that may make the cpu busy
# perhaps watch in task manager as well to see load
$result = 1; foreach ($number in 1..1000000) {$result = $result * $number};

Start-Sleep -Milliseconds 500
}
}

0..10 | % {
Start-Job -ScriptBlock $sb -ArgumentList $_
}

Get-Job

# Wait for it all to complete
While (Get-Job -State "Running")
{
Write-Output "waiting..."
Start-Sleep 2
}

# Getting the information back from the jobs
Get-Job | Receive-Job

# Clean Up
Get-Job | Remove-Job

关于powershell - 使用 Powershell 作业、运行空间或工作流时,线程是否在不同的内核上执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53331116/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com