11线程、多线程模型

线程、多线程模型

目录

一、什么是线程、为什么要引入线程
二、引入线程机制后的变化
三、线程有的属性
四、线程的实现方式
五、多线程模型

一、什么是线程、为什么要引入线程

1、线程引入原因分析:

  • 没有引入进程之前,程序只能串行运行,进程时程序的一次运行
  • 有的进程有可能需要 “同时” 做很多事,而传统的进程只能串行的执行一系列程序,为此,引入线程 增加并发度
  • 传统进程是程序执行流的最小单位,引入线程后,线程成为程序执行流的最小单位
  • 例如:微信中可以同时发消息和视频聊天

2、线程:

  1. 可以把线程理解为轻量级进程。线程是基本的CPU执行单元,也是程序执行流的最小单元。引入线程后不仅进程可以并发,进程内的线程也可以并发,进一步提升了系统的并发度。
  2. 引入线程之后,进程只作为除CPU之外系统资源的分配单元(打印机等系统资源),线程作为处理机的分配单元

二、引入线程机制后有什么变化

1、资源分配、调度

  • (1)传统进程机制中,进程是资源分配、调度的基本单位
  • (2)引入线程后,进程成为资源分配的基本单位,线程成为调度的基本单位

2、并发性

  • (1)传统进程机制中,只能进程间并发
  • (2)引入线程后,各线程间也可以并发,提升了并发度

2、系统开销

  • (1)传统的进程间并发需要切换进程的运行环境,系统开销很大
  • (2)线程间并发,如果是在同一进程内,不需要切换运行环境,系统开销小
  • (3)引入线程后,并发所带来的系统开销减小

三、线程的属性

  1. 线程是处理机调度的基本的单位
  2. 多CPU计算机中,各个线程可以占用不同的CPU
  3. 每个线程都有一个线程ID和线程控制块TCB
  4. 线程也有就绪、阻塞、运行三种基本状态
  5. 线程几乎不拥有系统资源
  6. 同一进程的不同线程间共享进程的资源
  7. 由于共享内存地址空间,同一进程的线程间通信甚至不用系统干预
  8. 同一进程的线程切换不会引起进程切换
  9. 不同进程的线程切换会引起进程切换
  10. 切换同进程内的线程系统开销很小
  11. 切换进程系统开销 很大

四、线程的实现方式

1、用户级线程 应用程序通过线程库实现

  • 所有的线程管理工作都由应用程序负责,包括线程切换
  • 用户级线程中,线程切换在用户态下即可完成,无需系统干预
  • 在用户看来有多个线程,但是在操作系统的内核看来,操作系统意识不到线程的存在。因此,用户级线程对用户不透明,对操作系统透明
  • 可以理解为:用户级线程是从用户的角度看到的

2、内核级线程

  • 所有的线程管理工作都由操作系统的内核负责,包括线程调度和线程切换
  • 内核级线程的切换必须要在核心态下才能完成
  • 可以理解为:内核级线程就是从操作系统内核角度看到的线程

3、组合方式:

  • 在同时支持用户级线程和内核级线程的系统中采用两者的组合方式,将N个用户级线程映射到M个内核级线程上(N>=M)
  • 因为操作系统内核只 “看得见” 内核级线程,因此,内核级线程才是处理机分配到的单位

五、多线程模型

1、问题引入: 在同时支持用户级线程和内核级线程的系统中,由几个用户级线程映射到内核级线程的问题引入多线程模型
2、多对一模型:

  • 多个用户级线程映射到一个内核级线程
  • 优点是:线程切换在用户态下即可完成,线程管理开销小
  • 缺点是:当一个用户级线程阻塞后,整个进程都会被阻塞,系统并发度不高

3、一对一模型:

  • 一个用户级线程映射到一个内核级线程,一对一
  • 优点是 :一个线程阻塞还有其他线程,因此系统并发度高
  • 缺点是:一个用户进程会占用多个内核级线程,线程切换的是内核级线程,需要 到核心态,所以系统开销大

4、多对多模型:

  • 将N个用户级线程映射到M个内核级线程
  • 优点:解决了一对一模型一个用户进程占用多个内核线程导致的系统开销 大问题,也解决了多对一模型的并发度不高问题

5、知识点总结:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值