朋友配了台i7打游戏,任务管理器里进程后面写着16线程,他问线程数是不是越多越好,为什么导出视频还是卡。线程数这东西,光看数字没用,得看它和物理核、和软件调度之间的关系。
线程和核心不是一回事
物理核是真正干活的电路单元,线程是操作系统调度的最小单位。一个核可以通过超线程模拟出两个线程,所以4核8线程、6核12线程很常见。超线程并不能让性能翻倍,一般只提升两到三成,因为它要和另一个线程共享整数和浮点单元。
怎么看自己有多少线程
- 任务管理器:性能选项卡CPU下方直接显示内核数和逻辑处理器数。
- 命令行:输入wmic cpu get NumberOfCores,NumberOfLogicalProcessors。
- 程序里:读环境变量或用系统API拿逻辑处理器数量。
怎么查某个程序用了多少线程
任务管理器里右键进程选转到详细信息,详情页有一列就是线程数。也可以装Process Explorer,双击进程看Threads标签,能看到每个线程的起始地址和CPU占用。排查卡顿时,线程数异常暴涨常说明程序不断新建线程却没回收,是资源泄漏的典型信号。
线程开多少才合适
CPU密集任务比如视频转码、压缩,线程数设成逻辑处理器数附近最划算,开太多反而因上下文切换变慢。IO密集任务比如爬虫、下载,线程数可以远超核数,几十上百都行,因为大部分时间在等网络。数据库连接池常按核数的二到四倍配。
线程多了的代价
每个线程都要占栈内存,默认1M到8M,几千个线程轻松吃掉几个G。线程切换本身也耗CPU周期,开上千个线程做同一件事,服务器可能直接报无法创建新线程,这比慢更糟。所以别盲信线程越高越快,压测出来的最优值才靠谱。