称为轻量级进程。无论是流程还是线程,它们都是由task_struct
数据结构实现的。
1>那么,从那个意义上说,内核如何区分线程和进程?
2 - ;当上下文切换发生时,线程如何在上下文切换中获得更少的开销?因为在此线程之前,另一个进程的另一个线程可能正在运行。因此,即使在进程的线程之间共享资源,内核也应该加载所有资源。
答案 0 :(得分:3)
内核如何区分线程和进程。
来自http://www.kernel.org/doc/ols/2002/ols2002-pages-330-337.pdf和Linux - Threads and Process
这是在2.4开发周期中解决的问题 添加了一个称为“线程组”的概念。有联系 作为线程组一部分的所有任务的列表,并且有一个 表示组的ID,称为tgid。这个ID实际上是 组中第一个任务的pid(pid是分配了一个的任务ID Linux任务),类似于会话和进程组的工作方式。这个 功能通过标志启用clone()。
和
在内核中,每个线程都有自己的ID,称为PID(尽管将它称为TID或线程ID可能更有意义)并且它们也有一个TGID(线程组ID),即PID启动整个过程的线程。
简单地说,当创建新进程时,它将显示为一个线程 其中PID和TGID都是相同的(新的)数字。
当一个线程启动另一个线程时,启动的线程会自动获得 PID(因此调度程序可以独立调度它)但它继承 来自原始帖子的TGID。
因此主线程是具有相同PID和TGID的线程,并且该PID是进程PID。线程(但不是主线程)具有不同的PID但具有相同的TID。
答案 1 :(得分:3)
在内核中,每个进程和线程都有一个唯一的id(甚至是同一进程的线程),它存储在pid
变量中,同一进程的线程也共享一个共同的id,存储在tgid
中变量,并在调用getpid()
时返回给用户,因此允许内核将它们区分为可自行调度的不同实体。
当线程被同一进程的另一个线程抢占时,由于各种段如.text,.bss,.data,文件描述符等被共享,因此与不同进程上下文切换时相比,允许快速上下文切换,或者当不同进程的线程被上下文切换时。
答案 2 :(得分:0)
似乎你将一些概念混合在一起,由相同的数据结构实现并不意味着它们以相同的方式运行。
你可以阅读 what-is-the-difference-between-a-process-and-a-thread首先澄清你对流程和线程的理解。