@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/powershell-parallel-processing/#article>
    schema:about <https://comcomponent.com/knowledge/foreach-object-parallel/>, <https://comcomponent.com/knowledge/runspace/> ;
    schema:mentions <https://comcomponent.com/knowledge/using-scope-modifier/>, <https://comcomponent.com/knowledge/throttle-limit/>, <https://comcomponent.com/knowledge/start-threadjob/>, <https://comcomponent.com/knowledge/start-job/>, <https://comcomponent.com/knowledge/invoke-command-remote/>, <https://comcomponent.com/knowledge/concurrent-collection/>, <https://comcomponent.com/knowledge/measure-command/>, <https://comcomponent.com/knowledge/psm1-module/>, <https://comcomponent.com/knowledge/trivial-per-item-workload/>, <https://comcomponent.com/knowledge/io-wait-bound-workload/>, <https://comcomponent.com/knowledge/process-isolation-required/>, <https://comcomponent.com/knowledge/downstream-server-overload/> .

<https://comcomponent.com/knowledge/foreach-object-parallel/> a skos:Concept ;
    skos:prefLabel "ForEach-Object -Parallel"@ja ;
    skos:definition "PowerShell 7.0で追加された、入力の各要素を別のランスペースで並列実行するパラメーターセット。"@ja ;
    skos:altLabel "並列パラメーターセット"@ja ;
    ks:uses <https://comcomponent.com/knowledge/runspace/> ;
    ks:configuredBy <https://comcomponent.com/knowledge/throttle-limit/> ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/trivial-per-item-workload/> ;
    ks:recommendedFor <https://comcomponent.com/knowledge/io-wait-bound-workload/> ;
    ks:verifiedBy <https://comcomponent.com/knowledge/measure-command/> .

<https://comcomponent.com/knowledge/runspace/> a skos:Concept ;
    skos:prefLabel "ランスペース(runspace)"@ja ;
    skos:definition "PowerShellがスクリプトを実行するための実行環境そのもので、変数・関数・読み込み済みモジュール・カレントディレクトリといったセッションの状態一式を保持する。1つのプロセスの中に複数持てる。"@ja ;
    skos:altLabel "Runspace" ;
    skos:altLabel "実行環境"@ja .

<https://comcomponent.com/knowledge/using-scope-modifier/> a skos:Concept ;
    skos:prefLabel "$using:スコープ修飾子"@ja ;
    skos:definition "コマンドレットを呼び出したスレッドから、実行中の各スクリプトブロックのスレッドへ変数を渡すための修飾子。同一プロセス内では参照が渡り、別プロセス・別マシンではシリアライズされたコピーが渡る。"@ja ;
    skos:altLabel "Using Scope Modifier" .

<https://comcomponent.com/knowledge/throttle-limit/> a skos:Concept ;
    skos:prefLabel "ThrottleLimit"@ja ;
    skos:definition "同時に実行する数を指定するパラメーターで、ForEach-Object -Parallelではランスペースプールのサイズ(既定5)、Invoke-Commandでは同時接続台数(既定32)を意味する。"@ja ;
    skos:altLabel "-ThrottleLimit" ;
    skos:altLabel "同時実行数の上限"@ja .

<https://comcomponent.com/knowledge/concurrent-collection/> a skos:Concept ;
    skos:prefLabel "スレッドセーフなコレクション型"@ja ;
    skos:definition "System.Collections.Concurrent名前空間が提供する、複数スレッドから同時に更新しても壊れないコレクション型。通常のハッシュテーブルやListの代わりに使う。"@ja ;
    skos:altLabel "System.Collections.Concurrent" ;
    skos:altLabel "ConcurrentDictionary" ;
    skos:altLabel "ConcurrentBag" .

<https://comcomponent.com/knowledge/psm1-module/> a skos:Concept ;
    skos:prefLabel ".psm1スクリプトモジュール"@ja ;
    skos:definition "関数を書いたファイルを.psm1拡張子で保存するだけで作れるPowerShellのスクリプトモジュール形式。"@ja ;
    skos:altLabel "PowerShell Script Module" .

<https://comcomponent.com/knowledge/start-threadjob/> a skos:Concept ;
    skos:prefLabel "Start-ThreadJob"@ja ;
    skos:definition "同一プロセス内の独立したスレッド(ランスペース)でスクリプトブロックを実行する軽量なバックグラウンドジョブコマンドレットで、標準のジョブコマンドレットで扱える。"@ja ;
    skos:altLabel "ThreadJob" ;
    ks:uses <https://comcomponent.com/knowledge/runspace/> ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/process-isolation-required/> .

<https://comcomponent.com/knowledge/start-job/> a skos:Concept ;
    skos:prefLabel "Start-Job"@ja ;
    skos:definition "コマンドを新しいプロセスで非同期に実行する標準のバックグラウンドジョブコマンドレットで、結果はシリアライズを経て呼び出し元に返る。"@ja ;
    skos:altLabel "バックグラウンドジョブ"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/process-isolation-required/> .

<https://comcomponent.com/knowledge/invoke-command-remote/> a skos:Concept ;
    skos:prefLabel "Invoke-Command -ComputerName"@ja ;
    skos:definition "指定した複数のリモートコンピューターへ同じコマンドを実行するコマンドレットで、-ThrottleLimitの既定値32で同時接続数を制御する。"@ja ;
    skos:altLabel "リモートコンピューターへの並列実行"@ja ;
    ks:configuredBy <https://comcomponent.com/knowledge/throttle-limit/> .

<https://comcomponent.com/knowledge/trivial-per-item-workload/> a skos:Concept ;
    skos:prefLabel "1件あたりが軽い・少件数のワークロード"@ja ;
    skos:definition "1件あたりの処理時間がミリ秒オーダーで終わる、または対象が数十件程度しかない処理。並列化のオーバーヘッドが相対的に大きくなる。"@ja ;
    skos:altLabel "些細な処理"@ja .

<https://comcomponent.com/knowledge/io-wait-bound-workload/> a skos:Concept ;
    skos:prefLabel "待ち時間が支配的な処理"@ja ;
    skos:definition "ネットワークの応答待ちやディスクI/O待ちが処理時間の大半を占め、CPUが遊んでいる処理。並列化によって全体の所要時間を短縮できる。"@ja ;
    skos:altLabel "ネットワーク待ち・I/O待ちの処理"@ja .

<https://comcomponent.com/knowledge/measure-command/> a skos:Concept ;
    skos:prefLabel "Measure-Command"@ja ;
    skos:definition "スクリプトブロックやコマンドの実行時間を計測してTimeSpanを返すコマンドレットで、測定対象の出力自体は破棄され結果に含まれない。"@ja ;
    skos:altLabel "実行時間の計測"@ja .

<https://comcomponent.com/knowledge/process-isolation-required/> a skos:Concept ;
    skos:prefLabel "プロセス隔離が必要な処理"@ja ;
    skos:definition "呼び出し元プロセスを巻き込みたくない処理や、異なるカルチャ設定・環境変数、32bit/64bitなど実行環境そのものを分けたい処理。"@ja ;
    skos:altLabel "プロセス分離の要件"@ja .

<https://comcomponent.com/knowledge/downstream-server-overload/> a skos:Concept ;
    skos:prefLabel "接続先サーバーへの過負荷"@ja ;
    skos:definition "こちらの並列度を上げすぎることで、接続先の業務サーバーやAPIのレート制限・同時接続上限を超えて負荷をかけてしまうこと。"@ja ;
    skos:altLabel "相手側のレート制限・同時接続上限超過"@ja .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/foreach-object-parallel/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/runspace/> ;
    schema:description "ForEach-Object -Parallelは各スクリプトブロックを別のランスペースで実行する"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/foreach-object> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/foreach-object-parallel/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/using-scope-modifier/> ;
    schema:description "呼び出し元の変数を並列スクリプトブロックへ渡す場合、$using:スコープ修飾子を使う"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/foreach-object> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/foreach-object-parallel/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/throttle-limit/> ;
    schema:description "同時に実行するスクリプトブロックの数はThrottleLimit(既定5)で構成でき、7.1以降はランスペースプールのサイズになる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/foreach-object> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/using-scope-modifier/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/concurrent-collection/> ;
    schema:description "$using:で渡した値を並列スクリプトブロック側から書き換えるなら、System.Collections.Concurrentのスレッドセーフな型が前提になる。通常のハッシュテーブルやListの同時更新は壊れる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/foreach-object> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/foreach-object-parallel/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/psm1-module/> ;
    schema:description "呼び出し元で定義した関数を並列スクリプトブロック内から使うには、共通処理を.psm1モジュールにして各ランスペースの先頭でImport-Moduleする必要がある"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/foreach-object> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/start-threadjob/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/runspace/> ;
    schema:description "Start-ThreadJobは別プロセスではなく同一プロセス内の独立したスレッド(ランスペース)でスクリプトブロックを実行する"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/threadjob/start-threadjob> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/start-job/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/psm1-module/> ;
    schema:description "Start-Jobのスクリプトブロックも別プロセスの新しいセッションで動くため、呼び出し元の関数を使うにはモジュール化が必要になる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_jobs> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/start-threadjob/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/psm1-module/> ;
    schema:description "Start-ThreadJobのスクリプトブロックも別ランスペースで動くため、呼び出し元の関数を使うにはモジュール化が必要になる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/threadjob/start-threadjob> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/invoke-command-remote/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/throttle-limit/> ;
    schema:description "同時に接続するコンピューターの台数はThrottleLimit(既定32)で構成できる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/invoke-command> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/foreach-object-parallel/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/trivial-per-item-workload/> ;
    schema:description "1件あたりの処理が軽い、または件数が少ない処理に並列化を使うと、オーバーヘッドで通常より遅くなり得る"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/foreach-object> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/foreach-object-parallel/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/io-wait-bound-workload/> ;
    schema:description "ネットワーク待ちやディスクI/O待ちが支配的な処理、マルチコアで意味のある計算処理には並列化の価値がある"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/foreach-object> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/foreach-object-parallel/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/measure-command/> ;
    schema:description "並列化すべきかどうかは、逐次版と並列版をMeasure-Commandで比較して判断する"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/measure-command> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/start-job/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/process-isolation-required/> ;
    schema:description "呼び出し元プロセスを巻き込みたくない処理や32bit/64bitなど実行環境の分離が必要な処理にはStart-Jobが向く"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_jobs> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/start-threadjob/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/process-isolation-required/> ;
    schema:description "Start-ThreadJobは同一プロセス内で動くため、プロセスそのものの隔離が必要な用途には使えない"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/threadjob/start-threadjob> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/throttle-limit/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/downstream-server-overload/> ;
    schema:description "相手が業務サーバーやAPIの場合、ThrottleLimitを自分の都合だけで上げすぎると相手側の同時接続上限やレート制限を超えて障害の加害者になりかねない"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/foreach-object> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/invoke-command-remote/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/downstream-server-overload/> ;
    schema:description "台数とForEach-Object -Parallelの並列度を掛け合わせた総負荷が相手側にかかるため、両者を組み合わせるときは特に注意が要る"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/invoke-command> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .
