为什么要知道某个进程开启了多少线程 ?
-
好奇,但是这个很重要
-
性能调优
概念澄清
-
这里所说的线程指的是内核级别的线程,不是用户态线程,所谓用户态线程是指不依赖操作系统而是在用户态下实现的执行流调度。
-
这里的线程个数指的是进程运行时的线程个数,这个数值会随着线程的创建和销毁而动态变化。
-
本文主要关注Linux平台。
背景知识与原理
- /proc/{pid}
/proc/{pid}下记录了每个进程运行时的所有关键信息,那这些信息是谁来生成的呢,答案是Linux内核。
Linux内核在执行你写的程序时,将所有关键信息写到了/proc/{pid}下,因此你可以通过查看这个目录下的信息来或者进程的运行时行为,这对于那些好奇内核是如何运行程序的同学是非常重要的。
你可以把这个目录下的信息理解为Linux内核在执行你写的程序时所打印的Log。通过该Log你就可以知道进程开启了多少线程了。
- 进程号:pid
Linux内核在执行程序时需要为每个进程分配一个id,类似于身份证号的作用,用于识别进程,因此想获取某个进程开启了多少线程首先必须要知道是进程id。
实验开始
- 实验一:最简单的情况
我们来看一下最简单的helloworld程序有多少线程:
#include <iostream>
#include <unistd.h>
int main()
{
std