Remember to maintain security and privacy. Do not share sensitive information. Procedimento.com.br may make mistakes. Verify important information. Termo de Responsabilidade

Como Executar Processamento Paralelo no Windows Usando PowerShell

O processamento paralelo é uma técnica que permite a execução simultânea de múltiplas tarefas para melhorar a eficiência e reduzir o tempo de execução de processos complexos. No ambiente Windows, o PowerShell oferece funcionalidades robustas para implementar processamento paralelo, aproveitando os recursos de hardware disponíveis, como múltiplos núcleos de CPU.

O PowerShell, uma ferramenta de automação e configuração de tarefas, é uma escolha excelente para realizar processamento paralelo devido à sua capacidade de gerenciar tarefas assíncronas e pipelines de dados. Este artigo irá explorar como você pode utilizar o PowerShell para executar tarefas em paralelo, fornecendo exemplos práticos para ilustrar o processo.

Exemplos:

  1. Usando ForEach-Object -Parallel no PowerShell 7+

    O PowerShell 7 introduziu o parâmetro -Parallel para o cmdlet ForEach-Object, que facilita a execução de scripts em paralelo.

    $numbers = 1..10
    
    $numbers | ForEach-Object -Parallel {
       Start-Sleep -Seconds $_
       "Processed $_"
    }

    Neste exemplo, cada número de 1 a 10 é processado em paralelo, com um atraso correspondente ao valor do número. O comando Start-Sleep simula uma tarefa que consome tempo.

  2. Usando Jobs no PowerShell

    Outra abordagem é utilizar jobs, que são tarefas assíncronas que podem ser gerenciadas e monitoradas.

    $jobs = @()
    
    foreach ($i in 1..10) {
       $jobs += Start-Job -ScriptBlock {
           Start-Sleep -Seconds 5
           "Job $($using:i) completed"
       }
    }
    
    # Aguardar todos os jobs completarem
    $jobs | ForEach-Object { $_ | Wait-Job }
    
    # Obter resultados dos jobs
    $jobs | ForEach-Object { Receive-Job -Job $_ }

    Neste exemplo, criamos 10 jobs que executam em paralelo, cada um com um atraso de 5 segundos. Usamos Start-Job para iniciar os jobs, Wait-Job para aguardar a conclusão e Receive-Job para obter os resultados.

  3. Usando Runspaces

    Para um controle mais granular e melhor desempenho, podemos usar runspaces, que são threads leves.

    $runspaces = [System.Collections.ArrayList]::new()
    $runspacePool = [runspacefactory]::CreateRunspacePool(1, [Environment]::ProcessorCount)
    $runspacePool.Open()
    
    1..10 | ForEach-Object {
       $runspace = [powershell]::Create().AddScript({
           param ($i)
           Start-Sleep -Seconds $i
           "Runspace $i completed"
       }).AddArgument($_)
    
       $runspace.RunspacePool = $runspacePool
       $runspaces.Add([pscustomobject]@{ Pipe = $runspace; Status = $runspace.BeginInvoke() })
    }
    
    $runspaces | ForEach-Object {
       $_.Pipe.EndInvoke($_.Status)
       $_.Pipe.Dispose()
    }
    
    $runspacePool.Close()
    $runspacePool.Dispose()

    Neste exemplo, utilizamos runspaces para criar threads leves que executam em paralelo. Cada runspace executa um script com um atraso correspondente ao seu índice.

Este artigo demonstrou como utilizar o PowerShell para realizar processamento paralelo no Windows, oferecendo diferentes abordagens que podem ser adaptadas conforme a complexidade e os requisitos específicos das suas tarefas.

To share Download PDF

Gostou do artigo? Deixe sua avaliação!
Sua opinião é muito importante para nós. Clique em um dos botões abaixo para nos dizer o que achou deste conteúdo.