轻量级进程ID与进程ID之间的区别

在Linux下,线程又被称为轻量级进程。
每一个用户态的线程,在内核中都对应一个调度实体,也拥有自己的进程描述符(task_struct结构体)。 没有线程之前,一个进程对应内核中一个进程描述符,对应一个进程ID。但是引入线程的概念之后,一个用户进程下管辖N个用户态线程。每个线程作为一个独立的调度的实体,在内核态中都有自己的进程描述符,进程和内核描述符一下变成了1:N的关系。POSIX标准又要求同一进程中的线程调用getpid函数时返回相同的进程ID, 于是Linux内核就引入了线程组的概念。多线程的进程,又被称为 线程组。线程组内每一个线程在内核中都有一个进程描述符(task_sruct)与之对应,且进程描述符结构体中的pid对应的是线程id,而非进程id。进程描述符中的tgid含义是Thread Group ID,对应的是用户级的进程id。线程组内存在一个线程ID与进程ID相等,该线程即为线程组的主线程。
线程组内的其他线程ID则由内核分配,但是线程组ID和主线程的线程组ID一样,无论是主线程创建新线程,还是新线程再创建新线程,都是这样。但是线程与进程不一样,进程间有父子关系,但是线程之间均为对等关系,即 同一个线程组的线程,没有层次关系。

猜你喜欢

转载自blog.csdn.net/WEIYANGBIN/article/details/110941685