Start-ThreadJob

Cria trabalhos em segundo plano semelhantes ao Start-Job cmdlet .

Syntax

Start-ThreadJob
     [-ScriptBlock] <ScriptBlock>
     [-Name <String>]
     [-InitializationScript <ScriptBlock>]
     [-InputObject <PSObject>]
     [-ArgumentList <Object[]>]
     [-ThrottleLimit <Int32>]
     [<CommonParameters>]
Start-ThreadJob
     [-FilePath] <String>
     [-Name <String>]
     [-InitializationScript <ScriptBlock>]
     [-InputObject <PSObject>]
     [-ArgumentList <Object[]>]
     [-ThrottleLimit <Int32>]
     [<CommonParameters>]

Description

Start-ThreadJob cria trabalhos em segundo plano semelhantes ao Start-Job cmdlet . A diferença main é que os trabalhos criados são executados em threads separados dentro do processo local. Por padrão, os trabalhos usam o diretório de trabalho atual do chamador que iniciou o trabalho.

O cmdlet também dá suporte a um parâmetro ThrottleLimit para limitar o número de trabalhos em execução ao mesmo tempo. À medida que mais trabalhos são iniciados, eles são enfileirados e esperam até que o número atual de trabalhos caia abaixo do limite de limitação.

Exemplos

Exemplo 1 – Create trabalhos em segundo plano com um limite de thread de 2

Start-ThreadJob -ScriptBlock { 1..100 | % { sleep 1; "Output $_" } } -ThrottleLimit 2
Start-ThreadJob -ScriptBlock { 1..100 | % { sleep 1; "Output $_" } }
Start-ThreadJob -ScriptBlock { 1..100 | % { sleep 1; "Output $_" } }
Get-Job

Id   Name   PSJobTypeName   State        HasMoreData   Location     Command
--   ----   -------------   -----        -----------   --------     -------
1    Job1   ThreadJob       Running      True          PowerShell   1..100 | % { sleep 1;...
2    Job2   ThreadJob       Running      True          PowerShell   1..100 | % { sleep 1;...
3    Job3   ThreadJob       NotStarted   False         PowerShell   1..100 | % { sleep 1;...

Exemplo 2 – Comparar o desempenho de Start-Job e Start-ThreadJob

Este exemplo mostra a diferença entre Start-Job e Start-ThreadJob. Os trabalhos executam o Start-Sleep cmdlet por 1 segundo. Como os trabalhos são executados em paralelo, o tempo total de execução é de cerca de 1 segundo, além do tempo necessário para criar os trabalhos.

# start five background jobs each running 1 second
Measure-Command {1..5 | % {Start-Job {Start-Sleep 1}} | Wait-Job} | Select-Object TotalSeconds
Measure-Command {1..5 | % {Start-ThreadJob {Start-Sleep 1}} | Wait-Job} | Select-Object TotalSeconds

TotalSeconds
------------
   5.7665849
   1.5735008

Depois de subtrair 1 segundo para o tempo de execução, você pode ver que Start-Job leva cerca de 4,8 segundos para criar cinco trabalhos. Start-ThreadJob é 8 vezes mais rápido, levando cerca de 0,6 segundos para criar cinco trabalhos. Os resultados podem variar em seu ambiente, mas a melhoria relativa deve ser a mesma.

Exemplo 3 – Create trabalhos usando InputObject

Neste exemplo, o bloco de script usa a $input variável para receber entrada do parâmetro InputObject . Isso também pode ser feito canalizando objetos para Start-ThreadJob.

$j = Start-ThreadJob -InputObject (Get-Process pwsh) -ScriptBlock { $input | Out-String }
$j | Wait-Job | Receive-Job

NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
 ------    -----      -----     ------      --  -- -----------
     94   145.80     159.02      18.31   18276   1 pwsh
    101   163.30     222.05      29.00   35928   1 pwsh

$j = Get-Process pwsh | Start-ThreadJob -ScriptBlock { $input | Out-String }
$j | Wait-Job | Receive-Job

NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
 ------    -----      -----     ------      --  -- -----------
     94   145.80     159.02      18.31   18276   1 pwsh
    101   163.30     222.05      29.00   35928   1 pwsh

Parâmetros

-ArgumentList

Especifica uma matriz de argumentos ou valores de parâmetro para o script especificado pelos parâmetros FilePath ou ScriptBlock .

ArgumentList deve ser o último parâmetro na linha de comando. Todos os valores que seguem o nome do parâmetro são valores interpretados na lista de argumentos.

Type:Object[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-FilePath

Especifica um arquivo de script a ser executado como um trabalho em segundo plano. Insira o caminho e o nome do arquivo do script. O script deve estar no computador local ou em uma pasta que o computador local possa acessar.

Quando você usa esse parâmetro, o PowerShell converte o conteúdo do arquivo de script especificado em um bloco de script e executa o bloco de script como um trabalho em segundo plano.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-InitializationScript

Especifica os comandos que são executados antes do trabalho ser iniciado. Coloque os comandos entre chaves ({}) para criar um bloco de script.

Use esse parâmetro para preparar a sessão na qual o trabalho é executado. Por exemplo, você pode usá-lo para adicionar funções e módulos à sessão.

Type:ScriptBlock
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

Especifica os objetos usados como entrada para o bloco de script. Ele também permite a entrada de pipeline. Use a $input variável automática no bloco de script para acessar os objetos de entrada.

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-Name

Especifica um nome amigável para o novo trabalho. Você pode usar o nome para identificar o trabalho para outros cmdlets de trabalho, como o Stop-Job cmdlet .

O nome amigável padrão é "Job#", em que "#" é um número ordinal incrementado para cada trabalho.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ScriptBlock

Especifica os comandos a executar no trabalho em segundo plano. Coloque os comandos entre chaves ({}) para criar um bloco de script. Use a $Input variável automática para acessar o valor do parâmetro InputObject . Este parâmetro é necessário.

Type:ScriptBlock
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-ThrottleLimit

Esse parâmetro limita o número de trabalhos em execução ao mesmo tempo. À medida que os trabalhos são iniciados, eles são enfileirados e aguardam até que um thread esteja disponível no pool de threads para executar o trabalho. O limite padrão é 5 threads.

O tamanho do pool de threads é global para a sessão do PowerShell. Especificar um ThrottleLimit em uma chamada define o limite para chamadas subsequentes na mesma sessão.

Type:Int32
Position:Named
Default value:5
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Entradas

PSObject

Saídas

ThreadJob.ThreadJob