【Linux系统】线程:认识线程、线程与进程统一理解




在这里插入图片描述



一、更新认知


之前的认知

  • 进程:一个执行起来的程序。进程 = 内核数据结构 + 代码和数据
  • 线程:执行流,执行粒度比进程要更细。是进程内部的一个执行分值

更新认识:

  • a. 进程是承担分配系统资源的基本实体
  • b. 线程是OS调度的基本单位


二、Linux下线程的概念和实现


线程是进程内部的一个执行分支,说明一个进程就可能有多个线程,这样OS就必须将线程管理起来,Linux系统管理线程会通过先描述,再组织的方式,先将线程描述成一个结构 struct threadctlblock ,再对该结构进行组织,达到对系统内线程的管理组织。


问题:线程结构也是 task_struct


实际上,在 Linux系统中,没有真正的 struct threadctlblock 的 TCB 结构,Linux下的线程是用进程模拟实现的!


线程也使用进程的 task_struct 来描述,这样就无需为线程单独创建一套线程的管理机制,毕竟线程和进程过于相像,用进程模拟线程,大大减少了操作系统内核设计的难度,复用了历史代码,增加代码可维护性

减少了许多设计工作,如:线程创建、线程队列链表组织…、线程切换、线程….


Linux 这一点设计是非常厉害巧妙的,因为其他一些操作系统如 windows 是真的有线程的,内核代码和管理复杂不少!不像 Linux 的伪线程



线程共享资源:进程内多线程共用进程资源


一个进程 task_struct 内部还有多个用于描述线程的 task_struct

进程 task_struct 和线程 task_struct 同属于一个PCB结构,他们共享同一个进程地址空间,共享进程内的资源。

多个线程共享同一地址空间,因此 Text Segment、Data Segment 都是共享的。如果定义一个函数,在各线程中都可以调用;如果定义一个全局变量,在各线程中都可以访问到。除此之外,各线程还共享以下进程资源和环境:

  • 文件描述符表
  • 各种信号的处理方式 (SIG_IGN、SIG_DFL或者自定义的信号处理函数)
  • 当前工作目录
  • 用户 id 和组 id
  • ….


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值