进程线程
100%

进程利用率 · 第 3 课

进程线程

了解 Linux 线程如何共享进程资源,以及如何使用 ps 检查线程。

线程是在进程中受到调度的一条执行流。每个运行中的进程至少包含一个线程,而多线程进程则包含多条可以并发推进的执行流。

进程与线程

同一进程中的线程共享虚拟地址空间和打开的文件描述符等资源。每个线程仍拥有自己的执行状态,包括寄存器和栈。共享让通信更高效,但也意味着一个线程未同步的修改可能影响其他线程。

不同进程通常拥有各自独立的地址空间,并通过明确的进程间通信机制交换数据。这两种设计都不会天然更快或更安全;取舍取决于工作负载和实现方式。

同一进程中的线程通常共享哪项资源?

线程标识符

Linux 把每个线程表示为拥有自己线程 ID 的可调度任务。线程组首进程的 ID 通常显示为进程 ID,而所有成员共享一个线程组 ID。不同工具会使用 PIDTIDLWPSPID 等标签;应检查工具的字段定义,不要假定所有标签含义相同。

每个线程独立维护什么?

使用 ps 列出线程

使用明确的输出字段,可以避免含义模糊的默认布局:

$ ps -eLo pid,tid,psr,stat,comm

在 procps ps 中,-L 显示线程,-e 选择所有进程。pid 标识线程组,tid 标识单个线程,psr 显示线程上次运行所在的 CPU,stat 报告状态。若只检查一个进程,可以使用:

$ ps -L -p 1234 -o pid,tid,stat,pcpu,comm

线程列表只是快照。线程可能在下一刻退出或改变状态。

哪个命令会使用明确字段列出 PID 1234 所属的线程?

解读线程活动

单个线程的高 CPU 使用率可能被进程级平均值掩盖。应把线程级 CPU 样本与应用日志、栈跟踪和性能剖析工具结合起来。不了解暂停、权限和服务影响时,不要对生产任务附加调试器或发送信号。

为什么不应把 ps 线程列表视为永久状态?

课程已完成

你已完成 进程线程

现在,你可以区分进程资源与每个线程独有的执行状态。

  • 认识到每个进程至少包含一个线程。

  • 识别同一进程中线程共享的资源。

  • 使用 ps -L 明确列出进程 ID 和线程 ID。

  • 将线程输出视为快照,并与其他证据相互印证。

保存学习进度

创建免费账户即可保存本课进度,并在任意设备上继续学习。

创建免费账户
下一节
返回 进程利用率