核心概念
在开始之前,我们先快速理解几个关键术语:

- 物理核心: CPU 芯片上实际存在的独立处理单元,一个 8 核 CPU 就有 8 个物理核心。
- 逻辑核心 / 线程: 通过 超线程 技术将一个物理核心模拟成两个逻辑核心,这使得操作系统可以同时调度两个线程到一个物理核心上,提高资源利用率。逻辑核心数 = 物理核心数 × 超线程数。
- CPU 核心/线程数: 通常我们说的“8核16线程”,就是指 8 个物理核心,16 个逻辑核心。
查看 CPU 线程信息(查看硬件规格)
这些命令用于查看你的 CPU 有多少个物理核心和逻辑核心。
Linux
-
lscpu(最推荐,信息最全) 这个命令会以易读的表格形式显示所有 CPU 架构信息。lscpu
关键输出解读:
... (省略其他信息) ... CPU(s): 16 # 逻辑核心总数 (你看到的线程数) On-line CPU(s) list: 0-15 # 在线运行的CPU核心ID Thread(s) per core: 2 # 每个物理核心的线程数 (超线程开启时为2) Core(s) per socket: 8 # 每个CPU插槽的物理核心数 Socket(s): 1 # CPU插槽的数量 (主板上有几个CPU) ... -
nproc(快速获取逻辑核心数) 一个非常简单的命令,只输出逻辑核心的数量。
(图片来源网络,侵删)nproc # 输出: 16
-
/proc/cpuinfo(原始信息) 这是内核提供的 CPU 信息文件,内容最原始。cat /proc/cpuinfo | grep "processor" | wc -l # 统计 "processor" 关键词出现的次数,即为逻辑核心数 cat /proc/cpuinfo | grep "cores" | uniq # 查看每个物理核心包含多少个逻辑核心
Windows (命令行)
-
wmic(Windows Management Instrumentation Command-line) 这是 Windows 功能最强大的底层信息查询工具。# 查询逻辑处理器(即逻辑核心/线程数) wmic cpu get NumberOfLogicalProcessors # 查询物理核心数 wmic cpu get NumberOfCores
-
systeminfo(系统信息摘要) 会显示一个摘要信息,包含处理器信息。systeminfo | findstr /C:"处理器" # 或者 systeminfo | findstr /C:"Processor"
-
任务管理器 (图形界面)
(图片来源网络,侵删)- 按
Ctrl + Shift + Esc打开任务管理器。 - 切换到 “性能” 标签页。
- 点击 “CPU”。
- 你会清楚地看到 “内核数” (物理核心) 和 “逻辑处理器数” (逻辑核心/线程)。
- 按
查看正在运行的线程(软件层面)
这些命令用于查看当前系统中有哪些进程以及它们拥有多少个线程。
Linux
-
top(动态实时监控)top是一个非常经典的交互式进程查看器。top
解读界面头部信息:
top - 10:30:00 up 1 day, 5:30, 2 users, load average: 0.50, 0.60, 0.55Tasks: 152 total, 1 running, 151 sleeping, 0 stopped, 0 zombie%Cpu(s): 5.0 us, 3.0 sy, 0.0 ni, 90.0 id, 0.0 wa, 0.0 hi, 2.0 si, 0.0 stKiB Mem : 16256480 total, 3456784 free, 8901234 used, 3898862 buff/cacheKiB Swap: 2097152 total, 2097152 free, 0 used. 5432100 avail Mem关键指标:
Tasks: 总任务数、运行中、睡眠中等。%Cpu(s): CPU 时间分配比例(用户、系统、空闲等)。KiB Mem/Swap: 内存和交换分区的使用情况。
在
top界面中,按f键可以添加或删除要显示的列,按H键可以切换是否显示每个线程的详细信息。 -
htop(比top更现代、更友好)htop是top的增强版,彩色显示,支持鼠标操作,默认就显示线程数。htop
解读界面: 在进程列表中,
S列通常显示进程状态,THRDS列直接显示了该进程拥有的线程数量。 -
ps(静态快照)ps命令用于显示当前进程的静态快照。# 显示所有进程的PID和线程数 ps -eLf | wc -l # 或者更精确地查看每个进程的线程数 ps -eLf | awk '{print $4, $10}' | sort | uniq -c | sort -nr # 这个命令会统计每个进程ID和其对应的线程数
Windows (命令行)
-
tasklist(列出进程) 显示运行在本地或远程计算机上的所有进程。# 显示所有进程及其线程数 tasklist /v /fo list | findstr "线程数" # 或者更简洁的格式 tasklist /svc
-
任务管理器 (图形界面)
- 按
Ctrl + Shift + Esc打开任务管理器。 - 切换到 “详细信息” 标签页。
- 右键点击列表标题栏,选择 “选择列”。
- 勾选 “线程数”。
- 你就可以看到每个进程占用了多少个线程。
- 按
管理 CPU 线程/核心亲和性
有时,你可能需要将某个进程绑定到特定的 CPU 核心上运行,这被称为 CPU 亲和性,常用于性能测试、避免资源争用等场景。
Linux
-
taskset(管理进程亲和性)-
设置新进程的亲和性:
# 将 myprogram 进程只运行在 CPU 0 和 CPU 2 上 taskset -c 0,2 ./myprogram
-
修改正在运行的进程的亲和性:
# 查看 myprogram 的 PID pidof myprogram # 假设 PID 是 1234,将其亲和性设置为只使用 CPU 1, 3, 5, 7 taskset -cp 1,3,5,7 1234
-
-
numactl(针对 NUMA 架构) 对于多路服务器(有多个 CPU 插槽),numactl可以更精细地控制进程在哪个 CPU 插槽和哪个核心上运行。
Windows (命令行)
-
start /affinity(设置新进程的亲和性)start命令有一个/affinity参数,用于设置新启动进程的 CPU 亲和性,掩码是十六进制的。# CPU掩码: 1 (二进制 0001) = CPU 0 # 2 (二进制 0010) = CPU 1 # 4 (二进制 0100) = CPU 2 # 8 (二进制 1000) = CPU 3 # 掩码为 A (十六进制) = 1010 (二进制),表示进程将在 CPU 1 和 CPU 3 上运行。 start /affinity 0A notepad.exe
-
wmic process(修改运行中进程的亲和性) 这个方法比较复杂,需要计算 CPU 掩码,通常建议使用图形界面。 -
任务管理器 (图形界面 - 最简单)
- 按
Ctrl + Shift + Esc打开任务管理器。 - 切换到 “详细信息” 标签页。
- 右键点击你想要设置的进程,选择 “设置相关性...” (Set affinity...)。
- 在弹出的窗口中,你可以勾选或取消勾选 CPU 核心,非常直观。
- 按
总结表格
| 功能/目标 | Linux 命令 | Windows 命令/方法 |
|---|---|---|
| 查看物理/逻辑核心 | lscpu (最全), nproc (快速) |
wmic cpu get NumberOfCores/LogicalProcessors |
| 查看系统负载/进程 | top, htop (动态), ps (静态) |
tasklist, 任务管理器 (性能/详细信息) |
| 查看进程线程数 | htop (默认显示), ps -eLf |
任务管理器 (详细信息 -> 勾选“线程数”) |
| 绑定进程到特定核心 | taskset -c <cpu_list> <pid/program> |
start /affinity <mask> <program>, 任务管理器 (设置相关性) |
希望这份详细的总结能帮助你更好地理解和使用 CPU 线程相关的命令!
