Start-ThreadJob
Skapar bakgrundsjobb som liknar cmdleten Start-Job
.
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
skapar bakgrundsjobb som liknar cmdleten Start-Job
. Den största skillnaden är att jobben som skapas körs i separata trådar i den lokala processen. Som standard använder jobben den aktuella arbetskatalogen för anroparen som startade jobbet.
Cmdleten stöder också en ThrottleLimit-parameter för att begränsa antalet jobb som körs samtidigt. När fler jobb startas placeras de i kö och väntar tills det aktuella antalet jobb sjunker under begränsningsgränsen.
Exempel
Exempel 1 – Skapa bakgrundsjobb med en trådgräns på 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;...
Exempel 2 – Jämför prestanda för Start-Job och Start-ThreadJob
Det här exemplet visar skillnaden mellan Start-Job
och Start-ThreadJob
. Jobben kör cmdleten i Start-Sleep
1 sekund. Eftersom jobben körs parallellt är den totala körningstiden cirka 1 sekund, plus den tid som krävs för att skapa jobben.
# 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
När du har subtraherat 1 sekund för körningstiden kan du se att det Start-Job
tar cirka 4,8 sekunder att skapa fem jobb. Start-ThreadJob
är 8 gånger snabbare, vilket tar cirka 0,6 sekunder att skapa fem jobb. Resultaten kan variera i din miljö, men den relativa förbättringen bör vara densamma.
Exempel 3 – Skapa jobb med InputObject
I det här exemplet använder skriptblocket variabeln $input
för att ta emot indata från parametern InputObject . Detta kan också göras genom att skicka objekt till 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
Parametrar
-ArgumentList
Anger en matris med argument, eller parametervärden, för skriptet som anges av parametrarna FilePath eller ScriptBlock .
ArgumentList måste vara den sista parametern på kommandoraden. Alla värden som följer parameternamnet tolkas värden i argumentlistan.
Type: | Object[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-FilePath
Anger en skriptfil som ska köras som ett bakgrundsjobb. Ange sökvägen och filnamnet för skriptet. Skriptet måste finnas på den lokala datorn eller i en mapp som den lokala datorn kan komma åt.
När du använder den här parametern konverterar PowerShell innehållet i den angivna skriptfilen till ett skriptblock och kör skriptblocket som ett bakgrundsjobb.
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InitializationScript
Anger kommandon som körs innan jobbet startar. Omslut kommandona i klammerparenteser ({}
) för att skapa ett skriptblock.
Använd den här parametern för att förbereda sessionen där jobbet körs. Du kan till exempel använda den för att lägga till funktioner och moduler i sessionen.
Type: | ScriptBlock |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
Anger de objekt som används som indata till skriptblocket. Det möjliggör även pipelineindata. Använd den $input
automatiska variabeln i skriptblocket för att komma åt indataobjekten.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Name
Anger ett eget namn för det nya jobbet. Du kan använda namnet för att identifiera jobbet för andra jobb-cmdletar, till exempel cmdleten Stop-Job
.
Standardnamnet är "Job#", där "#" är ett ordningstal som ökas för varje jobb.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ScriptBlock
Anger vilka kommandon som ska köras i bakgrundsjobbet. Omslut kommandona i klammerparenteser ({}
) för att skapa ett skriptblock. Använd den $Input
automatiska variabeln för att komma åt värdet för parametern InputObject . Den här parametern krävs.
Type: | ScriptBlock |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ThrottleLimit
Den här parametern begränsar antalet jobb som körs samtidigt. När jobben startas placeras de i kö och väntar tills en tråd är tillgänglig i trådpoolen för att köra jobbet. Standardgränsen är 5 trådar.
Trådpoolens storlek är global för PowerShell-sessionen. Om du anger en ThrottleLimit i ett anrop anges gränsen för efterföljande anrop i samma session.
Type: | Int32 |
Position: | Named |
Default value: | 5 |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Indata
Utdata
ThreadJob.ThreadJob