Examples/Parallel-Execution.ps1
|
# Parallel Execution Example <# .SYNOPSIS Demonstrates ArgosCCF's parallel execution capabilities .DESCRIPTION Shows how to use Invoke-CCFParallel for high-performance multi-threaded operations. #> # Import ArgosCCF Import-Module "$PSScriptRoot\..\ArgosCCF.psd1" -Force Init-CCFLogger -FileName "ParallelExecution_Example.log" Log-Header "=== Parallel Execution Demo ===" # Example 1: Ping multiple servers in parallel Log-Info "Example 1: Parallel Server Ping" $servers = @('google.com', 'microsoft.com', 'github.com', 'stackoverflow.com') $pingScript = { param($server) $result = Test-Connection -ComputerName $server -Count 1 -Quiet return @{ Server = $server Online = $result Timestamp = Get-Date } } $pingResults = Invoke-CCFParallel -ScriptBlock $pingScript -InputObjects $servers -MaxThreads 4 foreach ($result in $pingResults) { $status = if ($result.Output.Online) { "✓ ONLINE" } else { "✗ OFFLINE" } $color = if ($result.Output.Online) { "Green" } else { "Red" } Write-Host "$($result.Target): $status" -ForegroundColor $color } # Example 2: Process files in parallel Log-Info "`nExample 2: Parallel File Processing" $numbers = 1..10 $processScript = { param($number) Start-Sleep -Milliseconds (Get-Random -Minimum 100 -Maximum 500) return $number * $number } $start = Get-Date $results = Invoke-CCFParallel -ScriptBlock $processScript -InputObjects $numbers -MaxThreads 4 $duration = (Get-Date) - $start Write-Host "`nProcessed $($numbers.Count) items in $($duration.TotalSeconds) seconds" -ForegroundColor Cyan foreach ($result in $results) { Write-Host "$($result.Target)² = $($result.Output)" -ForegroundColor Yellow } # Example 3: Parallel with retry logic Log-Info "`nExample 3: Parallel with Automatic Retries" $unreliableScript = { param($item) # Simulate 50% failure rate if ((Get-Random -Minimum 0 -Maximum 2) -eq 0) { throw "Simulated failure" } return "Success: $item" } $items = 1..5 $retryResults = Invoke-CCFParallel -ScriptBlock $unreliableScript -InputObjects $items -MaxThreads 2 -RetryCount 3 foreach ($result in $retryResults) { $statusColor = if ($result.Status -eq "Success") { "Green" } else { "Red" } Write-Host "Item $($result.Target): $($result.Status) (Retries: $($result.Retries))" -ForegroundColor $statusColor } # Example 4: Performance comparison Log-Header "--- Performance Comparison ---" $workload = 1..20 $heavyScript = { param($n) Start-Sleep -Milliseconds 100 return $n * 2 } # Sequential execution Log-Info "Running sequentially..." $seqStart = Get-Date foreach ($item in $workload) { $null = & $heavyScript $item } $seqTime = (Get-Date) - $seqStart # Parallel execution Log-Info "Running in parallel..." $parStart = Get-Date $null = Invoke-CCFParallel -ScriptBlock $heavyScript -InputObjects $workload -MaxThreads 4 $parTime = (Get-Date) - $parStart Write-Host "`nSequential: $($seqTime.TotalSeconds)s" -ForegroundColor Yellow Write-Host "Parallel: $($parTime.TotalSeconds)s" -ForegroundColor Green $speedup = [math]::Round($seqTime.TotalSeconds / $parTime.TotalSeconds, 2) Write-Host "Speedup: ${speedup}x faster!" -ForegroundColor Cyan Log-Header "=== Parallel Execution Demo Complete ===" |