第5章 线程

  • 一个进程至少有一个线程,但是也可以有多个线程

5.2 线程管理

存放线程的数据结构: 线程控制表
在这里插入图片描述

5.3 线程的实现方式
  • 由进程自己管理就是用户态线程的实现,由操作系统管理就是内核态线程实现;用户态和内核态的判断以线程表所处的位置维依据:位于内核叫内核态实现,位于用户层叫用户态实现;
  • 进程没有在用户态或内核态实现的问题,因为进程是在CPU上实现并发(多道编程),而CPU是由操作系统管理的,所以进程的实现只能由操作系统内核来进行;而线程是进程内部的东西,所以存在着两种可能;
  • 内核态线程实现 :使得用户编程简单,因为线程的复杂性由操作系统承担,如果一个线程执行阻塞操作,操作系统可以从容地调度另外一个线程执行;缺点是效率低,因为线程在内核态实现,每次线程切换都需要陷入到内核,内核态实现占用内核稀缺的内存资源,因为操作系统需要维护线程表
  • 线程用户态实现:优点是灵活,因为操作系统无需知道线程的存在,所以在任何操作系统上都能应用,其次线程切换快,因为在用户态进行,无需陷入到内核态;缺点是用户态线程实现无法完全达到线程提出所要达到的目的:进程级多道编程
    - 线程的阻塞会导致整个进程的阻塞: 解决办法:
    (1)在线程进行任何系统调用前,先行确认下该调用是否发生阻塞,即我们写一个包裹(wrap),將系统调用包裹起来,用户程序使用系统调用时需要通过这个wrap,wrap里有一段代码,专门检查发出的系统掉用会不会阻塞,如果会,就进制调用,否则,就放行 ;
    (2)在进程阻塞后想办法激活受阻进程的其他线程(调度器激活)
  • 现代操作系统的线程实现模型:用户态的执行系统负责进程内部在非阻塞时的切换;内核态的操作系统负责阻塞线程的切换
  • 从用户态进入内核态: ①:中断或异常,②:系统调用

思考题

  • 线程与进程的异同?https://www.zhihu.com/question/25532384(进程就是包含上下文切换的程序执行时间总和 = CPU加载上下文+CPU执行+CPU保存上下文;而线程共享了进程的上下文环境 ,是更为细小的CPU时间段)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值