[玩转系统] 启动线程作业(ThreadJob)
作者:精品下载站 日期:2024-12-14 20:28:43 浏览:15 分类:玩电脑
启动线程作业(ThreadJob)
Start-ThreadJob
模块 :ThreadJob创建类似于 Start-Job
cmdlet 的后台作业。
句法
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>]
描述
Start-ThreadJob
创建类似于 Start-Job
cmdlet 的后台作业。主要区别在于创建的作业在本地进程内的单独线程中运行。默认情况下,作业使用启动作业的调用者的当前工作目录。
该 cmdlet 还支持 ThrottleLimit 参数来限制一次运行的作业数量。随着越来越多的作业启动,它们会排队等待,直到当前作业数量低于限制。
示例
示例 1 - 创建线程限制为 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;...
示例 2 - 比较 Start-Job 和 Start-ThreadJob 的性能
此示例显示了 Start-Job
和 Start-ThreadJob
之间的区别。这些作业运行 Start-Sleep
cmdlet 1 秒。由于作业并行运行,因此总执行时间约为 1 秒,加上创建作业所需的任何时间。
# 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
减去 1 秒的执行时间后,您可以看到 Start-Job
创建 5 个作业大约需要 4.8 秒。 Start-ThreadJob
速度提高了 8 倍,创建 5 个作业大约需要 0.6 秒。结果可能因您的环境而异,但相对改进应该是相同的。
示例 3 - 使用 InputObject 创建作业
在此示例中,脚本块使用 $input
变量接收来自 InputObject 参数的输入。这也可以通过将对象管道传输到 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
示例 4 - 将作业输出流式传输到父主机
使用StreamingHost参数,您可以告诉作业将所有主机输出定向到特定主机。如果没有此参数,输出将进入作业数据流集合,并且在您收到作业的输出之前不会出现在主机控制台中。
在此示例中,使用 $Host
自动变量将当前主机传递给 Start-ThreadJob
。
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
的提示,并且您可以键入输入。然后,显示来自 Write-Warning
的消息。 Receive-Job
cmdlet 返回作业的所有输出。
示例 5 - 同时下载多个文件
Invoke-WebRequest
cmdlet 一次只能下载一个文件。以下示例使用 Start-ThreadJob
创建多个线程作业以同时下载多个文件。
$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
}
参数
-ArgumentList
为由 FilePath 或 ScriptBlock 参数指定的脚本指定参数或参数值的数组。
ArgumentList 必须是命令行上的最后一个参数。参数名称后面的所有值都是参数列表中的解释值。
类型 :Object[]
位置:命名
默认值:None
必需的:False
接受管道输入:False
接受通配符:False
-FilePath
指定作为后台作业运行的脚本文件。输入脚本的路径和文件名。该脚本必须位于本地计算机上或本地计算机可以访问的文件夹中。
使用此参数时,PowerShell 会将指定脚本文件的内容转换为脚本块,并将该脚本块作为后台作业运行。
类型 :String
位置:0
默认值:None
必需的:True
接受管道输入:False
接受通配符:False
-InitializationScript
指定作业启动之前运行的命令。将命令括在大括号 ({}
) 中以创建脚本块。
使用此参数准备运行作业的会话。例如,您可以使用它向会话添加功能和模块。
类型 :ScriptBlock
位置:命名
默认值:None
必需的:False
接受管道输入:False
接受通配符:False
-InputObject
指定用作脚本块输入的对象。它还允许管道输入。在脚本块中使用 $input
自动变量来访问输入对象。
PS对象
位置:命名
默认值:None
必需的:False
接受管道输入:True
接受通配符:False
-Name
为新作业指定一个友好名称。您可以使用该名称来向其他作业 cmdlet(例如 Stop-Job
cmdlet)标识该作业。
默认友好名称是“Job#”,其中“#”是每个作业递增的序号。
类型 :String
位置:命名
默认值:None
必需的:False
接受管道输入:False
接受通配符:False
-ScriptBlock
指定要在后台作业中运行的命令。将命令括在大括号 ({}
) 中以创建脚本块。使用 $Input
自动变量访问 InputObject 参数的值。此参数是必需的。
ScriptBlock
位置:0
默认值:None
必需的:True
接受管道输入:False
接受通配符:False
-StreamingHost
此参数提供了一种线程安全的方法,允许 Write-Host
输出直接转到传入的 PSHost 对象。如果没有它,Write-Host
输出将进入作业信息数据流集合,并且在作业完成运行之前不会出现在主机控制台中。
PS主机
位置:命名
默认值:None
必需的:False
接受管道输入:False
接受通配符:False
-ThrottleLimit
该参数限制一次运行的作业数量。当作业启动时,它们会排队等待,直到线程池中有可用的线程来运行作业。默认限制为 5 个线程。
线程池大小对于 PowerShell 会话来说是全局的。在一次调用中指定 ThrottleLimit 可以设置同一会话中后续调用的限制。
类型 :整数32
位置:命名
默认值:5
必需的:False
接受管道输入:False
接受通配符:False
输入
PSObject
输出
ThreadJob.ThreadJob
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag