ThreadJob'u Başlat (ThreadJob)
Start-ThreadJob
- Modül:
- ThreadJob
Start-Job cmdlet'ine benzer arka plan işleri oluşturur.
Sözdizimi
Start-ThreadJob
[-ScriptBlock] <ScriptBlock>
[-Name <String>]
[-InitializationScript <ScriptBlock>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[-ThrottleLimit <Int32>]
[-StreamingHost <PSHost>]
[<CommonParameters>]Start-ThreadJob
[-FilePath] <String>
[-Name <String>]
[-InitializationScript <ScriptBlock>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[-ThrottleLimit <Int32>]
[-StreamingHost <PSHost>]
[<CommonParameters>]Tanım
Start-ThreadJob, Start-Job cmdlet'ine benzer arka plan işleri oluşturur. Temel fark, oluşturulan işlerin yerel süreç içerisinde ayrı iş parçacıklarında çalıştırılmasıdır. Varsayılan olarak işler, işi başlatan arayanın geçerli çalışma dizinini kullanır.
Cmdlet aynı anda çalışan işlerin sayısını sınırlamak için ThrottleLimit parametresini de destekler. Daha fazla iş başlatıldıkça bunlar sıraya alınır ve mevcut iş sayısı kısıtlama sınırının altına düşene kadar beklenir.
Örnekler
Örnek 1 - İş parçacığı sınırı 2 olan arka plan işleri oluşturma
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;...Örnek 2 - Start-Job ve Start-ThreadJob'un performansını karşılaştırın
Bu örnek, Start-Job ile Start-ThreadJob arasındaki farkı gösterir. İşler Başlat-Uyku cmdlet'ini 1 saniye boyunca çalıştırır. İşler paralel çalıştığından, toplam yürütme süresi yaklaşık 1 saniye artı işleri oluşturmak için gereken süredir.
# 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.5735008Yürütme süresi için 1 saniye çıkarıldıktan sonra, Start-Job'un beş iş oluşturmasının yaklaşık 4,8 saniye sürdüğünü görebilirsiniz. Start-ThreadJob 8 kat daha hızlıdır ve beş iş oluşturmak yaklaşık 0,6 saniye sürer. Sonuçlar ortamınıza göre değişebilir ancak göreceli iyileşme aynı olmalıdır.
Örnek 3 - OutputObject'i kullanarak iş oluşturma
Bu örnekte komut dosyası bloğu, InputObject parametresinden girdi almak için $input değişkenini kullanır. Bu aynı zamanda nesneleri Start-ThreadJob'a aktararak da yapılabilir.
$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Örnek 4 - İş çıktısını ana ana bilgisayara aktarın
StreamingHost parametresini kullanarak bir işe tüm ana bilgisayar çıktısını belirli bir ana makineye yönlendirmesini söyleyebilirsiniz. Bu parametre olmadan çıktı, iş veri akışı koleksiyonuna gider ve işten çıktıyı alana kadar ana bilgisayar konsolunda görünmez.
Bu örnekte, geçerli ana bilgisayar, $Host otomatik değişkeni kullanılarak Start-ThreadJob'a aktarılır.
PS> Start-ThreadJob -ScriptBlock { Read-Host 'Say hello'; Write-Warning 'Warning output' } -StreamingHost $Host
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
7 Job7 ThreadJob NotStarted False PowerShell Read-Host 'Say hello'; ...
PS> Say hello: Hello
WARNING: Warning output
PS> Receive-Job -Id 7
Hello
WARNING: Warning output
PS>Read-Host isteminin görüntülendiğine ve girişi yazabildiğinize dikkat edin. Daha sonra Write-Warning mesajı görüntülenir. Receive-Job cmdlet'i işin tüm çıktısını döndürür.
Örnek 5 - Aynı anda birden fazla dosya indirin
Invoke-WebRequest cmdlet'i aynı anda yalnızca bir dosya indirebilir. Aşağıdaki örnek, aynı anda birden çok dosyayı indirmek üzere birden çok iş parçacığı işi oluşturmak için Start-ThreadJob'u kullanır.
$baseUri = 'https://github.com/PowerShell/PowerShell/releases/download'
$files = @(
@{
Uri = "$baseUri/v7.3.0-preview.5/PowerShell-7.3.0-preview.5-win-x64.msi"
OutFile = 'PowerShell-7.3.0-preview.5-win-x64.msi'
},
@{
Uri = "$baseUri/v7.3.0-preview.5/PowerShell-7.3.0-preview.5-win-x64.zip"
OutFile = 'PowerShell-7.3.0-preview.5-win-x64.zip'
},
@{
Uri = "$baseUri/v7.2.5/PowerShell-7.2.5-win-x64.msi"
OutFile = 'PowerShell-7.2.5-win-x64.msi'
},
@{
Uri = "$baseUri/v7.2.5/PowerShell-7.2.5-win-x64.zip"
OutFile = 'PowerShell-7.2.5-win-x64.zip'
}
)
$jobs = @()
foreach ($file in $files) {
$jobs += Start-ThreadJob -Name $file.OutFile -ScriptBlock {
$params = $using:file
Invoke-WebRequest @params
}
}
Write-Host "Downloads started..."
Wait-Job -Job $jobs
foreach ($job in $jobs) {
Receive-Job -Job $job
}Parametreler
-ArgumentList
FilePath veya ScriptBlock parametreleri tarafından belirtilen komut dosyası için bir bağımsız değişken dizisini veya parametre değerlerini belirtir.
ArgumentList komut satırındaki son parametre olmalıdır. Parametre adından sonra gelen tüm değerler, bağımsız değişken listesindeki yorumlanmış değerlerdir.
- Tip :
Object[]
- Konum:
Adlandırılmış
- Varsayılan değer:
None
- Gerekli:
-
False
- Boru hattı girişini kabul edin:
False
- Joker karakterleri kabul et:
False
-FilePath
Arka plan işi olarak çalıştırılacak bir komut dosyası dosyasını belirtir. Komut dosyasının yolunu ve dosya adını girin. Komut dosyası yerel bilgisayarda veya yerel bilgisayarın erişebileceği bir klasörde olmalıdır.
Bu parametreyi kullandığınızda PowerShell, belirtilen betik dosyasının içeriğini bir betik bloğuna dönüştürür ve betik bloğunu bir arka plan işi olarak çalıştırır.
- Tip :
String
- Konum:
0
- Varsayılan değer:
None
- Gerekli:
True
- Boru hattı girişini kabul edin:
False
- Joker karakterleri kabul et:
-
False
-InitializationScript
İş başlamadan önce çalıştırılacak komutları belirtir. Bir komut dosyası bloğu oluşturmak için komutları parantez ({comcode>) içine alın.
İşin çalıştığı oturumu hazırlamak için bu parametreyi kullanın. Örneğin, oturuma işlevler ve modüller eklemek için bunu kullanabilirsiniz.
- Tip :
ScriptBlock
- Konum:
Adlandırılmış
- Varsayılan değer:
None
- Gerekli:
False
- Boru hattı girişini kabul edin:
False
- Joker karakterleri kabul et:
False
-InputObject
Betik bloğuna girdi olarak kullanılan nesneleri belirtir. Aynı zamanda boru hattı girişine de izin verir. Giriş nesnelerine erişmek için komut dosyası bloğundaki $input otomatik değişkenini kullanın.
- Tip :
PSObject
- Konum:
Adlandırılmış
- Varsayılan değer:
None
- Gerekli:
False
- Boru hattı girişini kabul edin:
True
- Joker karakterleri kabul et:
False
-Name
Yeni iş için kolay bir ad belirtir. İşi Stop-Job cmdlet'i gibi diğer iş cmdlet'lerine tanımlamak için bu adı kullanabilirsiniz.
Varsayılan kolay ad "İş#" olup, burada "#" her iş için artan bir sıra numarasıdır.
- Tip :
String
- Konum:
Adlandırılmış
- Varsayılan değer:
None
- Gerekli:
False
- Boru hattı girişini kabul edin:
False
- Joker karakterleri kabul et:
False
-ScriptBlock
Arka plan işinde çalıştırılacak komutları belirtir. Bir komut dosyası bloğu oluşturmak için komutları parantez ({comcode>) içine alın. InputObject parametresinin değerine erişmek için $Input otomatik değişkenini kullanın. Bu parametre gereklidir.
- Tip :
ScriptBlock
- Konum:
0
- Varsayılan değer:
None
- Gerekli:
True
- Boru hattı girişini kabul edin:
False
- Joker karakterleri kabul et:
False
-StreamingHost
Bu parametre, Write-Host çıktısının doğrudan PSHost nesnesinde iletilen nesneye gitmesine izin vermek için iş parçacığı açısından güvenli bir yol sağlar. Bu olmadan, Write-Host çıktısı iş bilgileri veri akışı koleksiyonuna gider ve işlerin çalışması bitene kadar ana bilgisayar konsolunda görünmez.
- Tip :
PSHost
- Konum:
Adlandırılmış
- Varsayılan değer:
None
- Gerekli:
False
- Boru hattı girişini kabul edin:
False
- Joker karakterleri kabul et:
False
-ThrottleLimit
Bu parametre aynı anda çalışan işlerin sayısını sınırlar. İşler başlatıldığında kuyruğa alınırlar ve işi çalıştırmak için iş parçacığı havuzunda bir iş parçacığı bulunana kadar beklerler. Varsayılan sınır 5 iş parçacığıdır.
İş parçacığı havuzu boyutu PowerShell oturumu için geneldir. Bir çağrıda ThrottleLimit belirtilmesi, aynı oturumdaki sonraki çağrılar için sınırı belirler.
- Tip :
Int32
- Konum:
Adlandırılmış
- Varsayılan değer:
5
- Gerekli:
False
- Boru hattı girişini kabul edin:
False
- Joker karakterleri kabul et:
False
Girişler
PSObject
Çıkışlar
ThreadJob.ThreadJob