关于本文
本文是通过利用生成式 AI 的自动化生成流程创建的。我们查阅了 .NET 的 Process 和 ProcessThread 官方 API,并将其整理为以只读方式观察进程与线程关系的形式。验证状态:📘 已确认 .NET 官方规范・Windows 实机未验证
单个应用程序并不一定只靠一条处理逻辑运行。我们将通过 PowerShell 来查看一个进程中存在多个线程的情况。
首先尝试
$p = Get-Process -Id $PID "Process: $($p.ProcessName) PID=$($p.Id)" "Threads: $($p.Threads.Count)" $p.Threads | Select-Object -First 5 Id,ThreadState,PriorityLevel
观察这里
观察的重点在于,即使 PID 只有一个,也会并排显示多个 Thread Id。$PID因为使用了该命令,所以不会随意挑选目标,而是只读取当前的 PowerShell 自身。
修改一处试试
-First 5去掉限制以显示全部。接着稍等片刻后重新运行,并对比状态或数量是否发生了变化。
为什么会这样
进程是拥有内存和句柄等资源的执行单位,而线程则是其内部执行指令的单位。在使用多线程的应用中,可以分离等待与处理,或者并行推进工作。
graph TD P[PowerShell process / PID] --> T1[Thread] P --> T2[Thread] P --> T3[Thread]
如果在工作中应用
在找到“CPU 占用高的进程”后,这可以作为了解其内部存在大量线程的入口。不过,切勿仅凭 Thread Id 断定原因,而应将其连接到使用 Profiler 或 ETW 等工具的进一步观测中。
Microsoft Process.Threads: https://learn.microsoft.com/dotnet/api/system.diagnostics.process.threads
Microsoft ProcessThread: https://learn.microsoft.com/dotnet/api/system.diagnostics.processthread
