知識マップ: PowerShellの並列処理 ── ForEach-Object -Parallelとジョブの使い分け

記事「PowerShellの並列処理 ── ForEach-Object -Parallelとジョブの使い分け」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。

PowerShellの並列処理はランスペースという実行環境を複数用意して行われ、ForEach-Object -Parallelは各要素を別ランスペースのスレッドで実行し、呼び出し元の変数は$using:で参照として渡す。書き込みを伴う共有には通常のハッシュテーブルではなくConcurrentDictionaryなどスレッドセーフな型が前提になり、呼び出し元で定義した関数を使うには.psm1モジュール化して各ランスペースで読み込む必要がある。同時実行数はThrottleLimitで制御し、待ち時間が支配的な処理には効果がある一方、1件あたりが軽い処理や少件数の処理には向かずMeasure-Commandでの比較が推奨される。プロセス隔離が必要ならStart-Job、軽量な投げっぱなし処理ならStart-ThreadJobが向き、相手が業務サーバーの場合はThrottleLimitを上げすぎると相手側に過負荷をかけることもある。

PowerShellの並列処理の知識マップForEach-Object -Parallelがランスペースとusingスコープ修飾子の仕組みの上に成り立ち、ThrottleLimitでの制御やスレッドセーフなコレクション・.psm1モジュール化が必要になる場面、Start-ThreadJob・Start-Job・Invoke-Commandとの使い分け、並列化が効く場面と効かない場面の関係を示す図利用する利用するで構成できる前提とする前提とする利用する前提とする前提とするで構成できる用いるのは非推奨推奨される対応で確認できる推奨される対応用いるのは非推奨原因になり得る原因になり得るForEach-Object -Parallelランスペース(runspace)$using:スコープ修飾子ThrottleLimitスレッドセーフなコレクション型.psm1スクリプトモジュールStart-ThreadJobStart-JobInvoke-Command -ComputerName1件あたりが軽い・少件数のワークロード待ち時間が支配的な処理Measure-Commandプロセス隔離が必要な処理接続先サーバーへの過負荷

概念間の関係(全16件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

ForEach-Object -Parallel
PowerShell 7.0で追加された、入力の各要素を別のランスペースで並列実行するパラメーターセット。
ランスペース(runspace)
PowerShellがスクリプトを実行するための実行環境そのもので、変数・関数・読み込み済みモジュール・カレントディレクトリといったセッションの状態一式を保持する。1つのプロセスの中に複数持てる。
$using:スコープ修飾子
コマンドレットを呼び出したスレッドから、実行中の各スクリプトブロックのスレッドへ変数を渡すための修飾子。同一プロセス内では参照が渡り、別プロセス・別マシンではシリアライズされたコピーが渡る。
Start-ThreadJob
同一プロセス内の独立したスレッド(ランスペース)でスクリプトブロックを実行する軽量なバックグラウンドジョブコマンドレットで、標準のジョブコマンドレットで扱える。
Start-Job
コマンドを新しいプロセスで非同期に実行する標準のバックグラウンドジョブコマンドレットで、結果はシリアライズを経て呼び出し元に返る。
Invoke-Command -ComputerName
指定した複数のリモートコンピューターへ同じコマンドを実行するコマンドレットで、-ThrottleLimitの既定値32で同時接続数を制御する。
ThrottleLimit
同時に実行する数を指定するパラメーターで、ForEach-Object -Parallelではランスペースプールのサイズ(既定5)、Invoke-Commandでは同時接続台数(既定32)を意味する。

機械可読データ

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。