Linux 线程的理解与线程间的独有与共享

线程概念

在初学进程时,认为进程就是一个pcb,在linux下是一个task_struct结构体,是程序动态运行的描述,通过这个描述操作系统实现对程序运行的调度以及管理。

那线程是什么呢?

我们先通过一个比喻来区别进程与线程。

工厂中,至少有一个工人,工人是工厂中干活的人,工厂是集体资源的实体。实际上,工厂就是进程,工人就是线程。

理解起来,就是在一个进程中有一个或多个线程,每个线程都执行各自的任务。比如在程序中有多段代码,每个线程执行其中一段代码。但是对于系统内核来说,并没有线程这个说法,内核中只有轻量级进程(LWP),在用户态创建一个线程,相对应在内核中创建一个轻量级进程,所以线程也叫做用户态线程。

画图理解:
在这里插入图片描述一个进程中可以有一个或多个线程,线程是进程中的一条执行流,负责进程中一段代码的运行调度。在linux下,线程是通过pcb实现的,一个进程中可以有多个pcb。 线程之间共用进程中的同一个虚拟地址空间,通过同一个页表来完成映射。

在Linux下PCB可以实现对程序的调度运行,所以可以将其作为一个执行流,实现线程。

线程概念:线程就是进程中的一条执行流,在linux下是通过pcb实现的,一个线程中可以有多个执行流pcb,这些pcb共享进程中的大部分资源(pcb共用进程中的同一页表和虚拟地址),相较于传统pcb较为轻量化,因此也被称作轻量级进程。

进程与线程的关键性区别:进程是系统进行资源分配的基本单位;线程是系统进行运行调度的基本单位

线程间的独有与共享

线程的独有:

  • 标识符:唯一的标识符用来区分线程
  • 栈:独有的函数调用栈,防止栈混乱
  • 寄存器:其实就是pcb中的上下文数据、程序计数器等
  • 信号屏蔽字:阻塞信号集合。信号会打断当前操作,但是这个线程不想被打断,就可以将这个信号阻塞,让其他线程去处理这个信号。
  • errno: 由于同一个进程中可能有很多个线程在同时运行,可能某个线程进行系统调用后设置了errno值,而在该线程还没有处理这个错误,另外一个线程也进行系统调用设置errno值,这样错误值就有可能被修改。所以,不同的线程应该拥有自己的errno。
  • 优先级:各有各的调度优先级

线程的共享:

  • 虚拟地址空间:线程之间共享代码段和数据段
  • IO信息
  • 信号处理方式:信号是针对整个进程的,所以线程处理信号的方式都一样。哪个线程拿到时间片并且没有阻塞信号就去处理这个信号
  • 工作路径

面试题:

面试中,关于进程概念以及线程概念的回答。

  • 在最早学习进程的时候,认为进程就是一个pcb,在linux下是一个task_struct结构体,是程序运行的动态描述,通过这个描述操作系统实现对程序运行的调度以及管理。
  • 在学习线程的时候,知道线程是进程中的一条执行流,是cpu调度的基本单位,linux中的实现线程执行流使用的是pcb,一个进程中可以包含多个线程(pcb),这些pcb共享进程中的大部分资源,相较于传统pcb较为轻量化,因此也被称为轻量化进程。也知道了,进程是系统进行资源分配的基本单位。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值