web-dev-qa-db-ja.com

新しいPowerShell 7 ForEach-Object Parallelはどのように実装されていますか?

PowerShell 7では、パイプライン入力を並列で実行するために非常に必要な機能が導入されました。

PowerShell 7 のドキュメントには、これがどのように実装されるかについての詳細は記載されていません。

以前にPoshRSJobおよびInvoke-Parallelモジュールを利用したことがあるので、PowerShellジョブの実行よりも、Powershellでの並列操作の場合、ランスペースが従来よりはるかに効率的なアプローチと見なされていたことを知っています。私はこれがランスペースではなくスレッディングを使用していることを示すいくつかの混合コンテンツを読みましたが、他に特定のものを見つけることができません。

私はいくつかの技術的な洞察に本当に感謝します:

  1. .NETの観点から見た実行のライフサイクルとは
  2. 新機能はランスペースまたはスレッドですか? (またはランスペースはSystem.Management.Automationの.NETスレッドだけですか?)
  3. 並列処理に移行している今、これは従来のデバッグに複雑さをもたらしますか? 歴史的に、ランスペースを使用してデバッグするのはおおよその時間でしたが、どのオプションが改善されたのかわかりません
4
SheldonH

Foreach-object -parallelのデバッグ:

それを行うには、2番目のpwshプロセスが必要です。最初のもので行います:

foreach-object -parallel { Wait-Debugger;1;2;3 }

次に、2番目のウィンドウで、他のpwshのpidを確認します。次に、そのpshostprocessを入力します。ランスペースを見て、可用性が「InBreakpoint」と示されているものをデバッグします。 「v」は「ステップオーバー」を意味します。

get-process pwsh

 NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
 ------    -----      -----     ------      --  -- -----------
     64    44.32      82.23       1.70    3912  12 pwsh
     63    40.66      78.03       1.36    6472  12 pwsh

$pid
6472

Enter-PSHostProcess 3912

get-runspace

 Id Name            ComputerName    Type          State         Availability
 -- ----            ------------    ----          -----         ------------
  1 Runspace1       localhost       Local         Opened        Busy
  2 PSTask:1        localhost       Local         Opened        InBreakpoint
  3 RemoteHost      localhost       Local         Opened        Busy

debug-runspace 2
v
v
v

Foreach-object -parallel -asjobを実行すると、同じウィンドウでget-runspaceとdebug-runspaceを使用できます。しかし、ステップ実行中は出力を見ることができませんでした。

foreach-object -parallel { Wait-Debugger;1;2;3 } -asjob
get-runspace

 Id Name            ComputerName    Type          State         Availability
 -- ----            ------------    ----          -----         ------------
  1 Runspace1       localhost       Local         Opened        Available
  2 PSTask:1        localhost       Local         Opened        InBreakpoint

debug-runspace 2
v
v
v

Vscodeを使用した高度なセットアップを含む新しいデバッグビデオを次に示します。 https://www.reddit.com/r/PowerShell/comments/gn0270/advanced_powershell_debugging_techniques/

0
js2010