从内核角度看Linux 线程和进程的区别

本文从内核层面探讨Linux中线程和进程的区别,主要涉及task_struct结构体、创建过程和资源共享。线程与进程在task_struct中无明确标识区分,但通过pid和tgid可判断类型。线程创建时使用CLONE_THREAD标志共享资源,而进程则独立分配。创建过程主要由do_fork完成,涉及copy_process和设置ID等步骤。
摘要由CSDN通过智能技术生成

多数人都会讲说线程和进程在内核中是相同的,没有严格地做区分。这样讲是没错了,但对于应用开发者来说,这样讲是有点笼统。本文将从内核角度,分析线程和进程之间的区别,希望能对这一块感兴趣的人提供借鉴意义。

1 数据结构 task_struct

Linux中无论是进程还是线程,只要是调度单元,都通过 struct task_struct表示。这也是为什么讲说进程和线程在内核相同的原因。

struct task_struct有保存有关线程/进程中的一切信息,主要包括有线程/进程状态、与其他线程/进程关系、虚拟内存相关、日志相关、线程/进程限制等。该结构体定义在include/linux/sched.h文件中,感兴趣可以详细阅读

那么,进程和线程在task_struct结构体中是否有标识上的不同?

实际上,在struct task_struct中并没有明确的标识(枚举类型),区分该task是线程还是进程,不过可以通过pid和tgid简单判断当前task是哪种类型。

在该结构体中如下段code所示,全局pid和tgid保存在task_struct结构体中。pid_t一般为int型,即可以同时使用2^{32}不同标识的id。

pid用于标识不同进程和线程。

tgid用于标识线程组id,在同一进程中的所有线程具有同一tgid。tgid值等于进程第一个线程(主线程)的pid值。接着以CLONE_THREAD

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值