Ядра не имеют значения, вы можете запускать 100 заданий с одним ядром параллельно.
То, что я сделал сейчас:
foreach ($i in 1..10 ) { Start-Job -ScriptBlock {SLEEP -Seconds 5} }
MEASURE-COMMAND { Get-Job|Wait-Job }
и заканчивается:
TotalSeconds : 6,2208058
Пока что - запускаю его несколько раз, как только получу:
TotalSeconds : 14,3781632
Так что это может быть медленно, но определенно работает параллельно
Я начал проверять это, и яЯ думаю, что OP может быть на что-то.запустили несколько параллельных заданий, например:
get-job|remove-job
echo "start:"
get-date -UFormat " %H:%M:%S"
1..18| % {
Start-Job -ScriptBlock {
$obj = ""|select starttime, runtime, finishtime
$obj.starttime = get-date -UFormat " %H:%M:%S"
$obj.runtime = measure-command {SLEEP -Seconds 1}|select -ExpandProperty totalseconds
$obj.finishtime = get-date -UFormat " %H:%M:%S"
$obj
} |out-null
}
echo "finished spinning up jobs at:"
get-date -UFormat " %H:%M:%S"
echo "all jobs finished at "
Get-Job|Wait-Job |out-null
get-date -UFormat " %H:%M:%S"
echo "run time of each job"
get-job|receive-job| ft
и результат был такой:
start:
23:04:27
finished spinning up jobs at:
23:04:31
all jobs finished at
23:05:23
run time of each job
starttime runtime finishtime
--------- ------- ----------
23:05:07 1,0037849 23:05:08
23:05:07 1,0037791 23:05:08
23:05:22 1,0036025 23:05:23
23:05:22 1,0040943 23:05:23
23:05:22 1,003943 23:05:23
23:05:22 1,0116236 23:05:23
23:05:22 1,0217624 23:05:23
23:05:22 1,0056518 23:05:23
23:05:22 1,0038563 23:05:23
23:05:22 1,0082825 23:05:23
23:05:22 1,0042454 23:05:23
23:05:22 1,0033923 23:05:23
23:05:22 1,0128473 23:05:23
23:05:22 1,0190476 23:05:23
23:05:22 1,0188348 23:05:23
23:05:22 1,0235496 23:05:23
23:05:22 1,0058239 23:05:23
23:05:22 1,0153528 23:05:23
Обратите внимание: 40-секундная задержка от запуска сценария до начала первого задания и 15-секундный перерывмежду первыми 2 и отдыхом?
Чем больше заданий выполняется параллельно, тем хуже становится.Запуск 100 заданий с 10-секундным сном (так что первый не завершается до того, как все запущено) просто повесил окно PS и никогда не завершал ... что странно, потому что я использовал сотни заданий, каждое из которых занимало более 10 секунд, чтобы завершить иникогда не сталкивался с такими проблемами раньше.
Для этого требуется дальнейшее тестирование различных машин (возможно, ОС / процессора / антивируса?) И разных версий PowerShell.
Я также подумал, что, возможно, это что-то особенное для функции start-sleep, но нет- использовали разные методы, чтобы запустить его несколько секунд и все тот же эффект.Приходится проверять это, потому что я использую задания powershell (в основном, invoke-command -asjob) ежедневно, и если так будет продолжаться - мне может понадобиться переключиться на пространства выполнения или рабочие процессы для моих потребностей параллельной обработки ...