转自: https://nanxiao.me/linux-thread-model-analysis/
Linux线程模型浅析
Linux的线程是“轻量级进程”(Light-Weight Process,即LWP)。在Linux系统上运行一个程序时,操作系统会为这个程序创建一个进程,其实也就是“主线程”,后续则可以产生出更多的线程。每个进程都有一个PID(Process ID),每个线程也会有一个TID(Thread ID),属于同一进程的线程各自有拥有不同的TID,但它们的PID是相同的,都等于“主线程”的TID。因此从本质上来讲,Linux系统下的进程和线程没有区别,只不过同一进程中的线程可以共享某些资源。下面看一个例子:
#include <unistd.h>
#include <omp.h>
int main(void){
#pragma omp parallel num_threads(4)
for(;;)
{
sleep(1);
}
return 0;
}
编译并在后台运行这个程序:
$ gcc -fopenmp threads.c
$ ./a.out &
[1] 9802
进程的PID是9802,用ps -T pid命令查看进程的线程信息:
$ ps -T 9802
PID SPID TTY STAT TIME COMMAND
9802 9802 pts/1 Sl 0:00 ./a.out
9802 9803 pts/1 Sl 0:00 ./a.out
9802 9804 pts/1 Sl 0:00 ./a.out
9802 9805 pts/1 Sl 0:00 ./a.out
其中SPID即为TID。可以看到当前进程的PID是9802,共包含4个线程,其TID依次为:9802,9803,9804和9805,其中PID和SPID相同的线程即为主线程。