Linux 中的线程被称为轻量级进程。无论是进程还是线程,它们的实现都是通过task_struct
数据结构。
1> 那么,从这个意义上说,内核如何区分线程和进程?
2> 当发生上下文切换时,线程如何在上下文切换中获得更少的开销?因为在此线程之前,另一个进程的另一个线程可能正在运行。因此,即使资源在进程的线程之间共享,内核也应该加载所有资源。
内核如何区分线程和进程。
From http://www.kernel.org/doc/ols/2002/ols2002-pages-330-337.pdf http://www.kernel.org/doc/ols/2002/ols2002-pages-330-337.pdf和来自Linux - 线程和进程 https://stackoverflow.com/questions/9305992/linux-threads-and-process
这个问题在 2.4 开发周期中得到了解决
添加了一个称为“线程组”的概念。有一个链接
属于线程组的所有任务的列表,并且有一个
代表组的 ID,称为 tgid。这个ID实际上是
组中第一个任务的 pid(pid 是用分配的任务 ID
Linux 任务),类似于会话和进程组的工作方式。这
该功能通过clone() 标志启用。
and
在内核中,每个线程都有自己的 ID,称为 PID(尽管将其称为 TID 或线程 ID 可能更有意义),并且它们还有一个 TGID(线程组 ID),它是线程的 PID这开始了整个过程。
简单来说,当创建一个新进程时,它表现为一个线程
其中 PID 和 TGID 是相同的(新的)数字。
当一个线程启动另一个线程时,启动的线程将获得自己的线程
PID(因此调度器可以独立调度它)但它继承
来自原始线程的 TGID。
所以主线程是具有相同PID和TGID的线程,并且这个PID是进程PID。一个线程(但不是主线程)具有不同的 PID,但具有相同的 TID。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)