文章目录

  • 2.1.5 线程概念与多线程模型
    • 2.1.5.1 线程的来源
    • 2.1.5.2 线程机制带来的变化
    • 2.1.5.3 线程的属性
    • 2.1.5.4 线程的实现方式
    • 2.1.5.5 多线程模型
    • 2.1.5.6 小结

2.1.5 线程概念与多线程模型

2.1.5.1 线程的来源

在很久以前还没有引入进程之前,系统中的各个程序只能串行执行。比如你想要边听歌边开QQ,这是不可能做到的,只能先做一件事再做一件事。

后来引入进程后,系统中的各个程序可以并发执行。也就是说,可以同时听歌和开QQ。但是,即使引入了进程,也不能在QQ中同时视频聊天和传输文件。这是因为操作系统每一次执行都是按照进程为单位来执行的。

从上面的例子来看,进程是程序的一次执行。但是这些功能显然不可能是由一个程序顺序处理就能实现的。

有的进程可能需要“同时做很多事”,而传统的进程只能串行地执行一系列程序。为此,引入了线程来提高并发度。

在传统中,进程是程序执行流的最小单位,也就是说,CPU每次执行任务,最少执行一个进程。而后在现在,CPU每次执行任务,最少执行一个线程,线程是进程的子集。也就是说,引入线程后,线程成为了程序执行流的最小单位。

综上所述,我们可以把线程理解为“轻量级进程”。线程是一个基本的CPU执行单元,也是程序执行流的最小单位。引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度,使得一个进程内也可以并发处理各种任务(如QQ视频、文字聊天、传文件)。引入线程后,进程只作为除CPU之外的系统资源的分配单元(如打印机、内存地址空间等都是分配给进程的)。

2.1.5.2 线程机制带来的变化

资源分配、调度 并发性 系统开销
传统进程机制中,进程是资源分配、调度的基本单位 传统进程机制中,只能进程间并发 传统的进程间并发,需要切换进程的运行环境,系统开销很大。
引入线程后,进程是资源分配的基本单位,线程是调度的基本单位 引入线程后,各线程间也能并发,提高了并发度 线程间并发,如果是同一进程内的线程切换,则不需要切换进程环境,系统开销小,也就是说引入线程后,并发所带来的系统开销减小。

切换进程环境的类比:

去图书馆看书。

切换进程运行环境 = 有一个不认识的人要用桌子,你需要把你的书(运行环境)收走,他把自己的书(运行环境)放到桌上。

同一进程内的线程切换 = 你的舍友要用到这张书桌,可以不把桌子上的书收走,因为大家彼此认识(属于同一个进程)。

2.1.5.3 线程的属性

2.1.5.4 线程的实现方式

用户级线程由应用程序通过线程库实现。所有的线程管理工作都由应用程序负责(包括线程切换)。用户级线程中,线程切换可以在用户态下即可完成,无需操作系统干预。在用户看来,是有多个线程;但是对于操作系统内核来说,并意识不到线程的存在。即用户级线程对用户不透明,对操作系统透明。

内核级线程(Kernel-Level Thread,KTL,又称为“内核支持的线程”)

内核级线程的管理工作由操作系统内核完成。线程调度、切换等工作都由内核负责,因此内核级线程的切换必然需要在核心态下才能完成。

在同时支持用户级线程和内核级线程的系统中,可采用两者组合的方式:将n个用户级线程映射到m个内核级线程上(n>=m)

需要重点关注的是:操作系统只“看得见”内核级线程,因此只有内核级线程才是处理机分配的单位

拿上面的映射图来说,该进程由两个内核级线程和三个用户级线程构成,在用户看来,这个进程中有三个线程。但即使该进程在一个4核处理机的计算机上运行,也最多只能被分配到两个核,最多只能有两个用户线程并行执行。

2.1.5.5 多线程模型

在同时支持用户级线程和内核级线程的系统中,由几个用户级线程映射到几个内核级线程的问题引出了“多线程模型”问题。

多对一模型

多个用户及线程映射到一个内核级线程。每个用户进程只对应一个内核级线程。

优点:用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的系统开销小,效率高。

缺点:当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。多个线程不可在多核处理机上并行运行。

一对一模型

一个用户及线程映射到一个内核级线程。每个用户进程有与用户级线程同数量的内核级线程。

优点:当一个线程被阻塞后,别的线程还可以继续执行,并发能力强,多线程可在多核处理机上并行执行。

缺点:一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大。

多对多模型

n用户线程映射到m个内核级线程(n>=m)。每个用户进程对于m个内核级线程。

其克服了多对一模型和一对多模型的缺点。

2.1.5.6 小结

这一小节的知识点易作为选择题考查。


王道操作系统考研笔记——2.1.5 线程概念与多线程模型相关推荐

  1. 操作系统学习笔记-2.1.5线程概念和多线程模型

    操作系统学习笔记-2019 王道考研 操作系统-2.1.5线程概念和多线程模型 文章目录 5线程概念和多线程模型 5.1知识概览 5.2 什么是线程?为什么要引入线程? 5.3引入线程及之后,有什么变 ...

  2. 王道操作系统考研笔记——1.1.1 操作系统的概念、功能和目标

    如果这篇博客对您有用的话,可以给我点个赞吗,这对我很重要,谢谢!❤️ 文章目录 1.1.1 操作系统的概念.功能和目标 1.1.1.1 操作系统的概念 1.1.1.2 作为系统资源的管理者 1.1.1 ...

  3. 线程概念和多线程模型【操作系统学习笔记】

    11.线程概念和多线程模型

  4. 【操作系统】—线程概念和多线程模型

    [操作系统]-线程概念和多线程模型 本章节学习内容如下 一.什么是线程,为什么要引入线程 线程是一个基本的CPU执行单元,也是程序执行流的最小单位 二.引入线程机制后,有什么变化? 三.线程的属性 线 ...

  5. (王道408考研操作系统)第二章进程管理-第一节5:线程概念和多线程模型

    文章目录 一:引导 二:区别"进程"."线程"和"轻量级进程" (1)进程和线程的关系 (2)Linux中没有真正意义上的线程 (3)轻量级 ...

  6. 王道 ——线程概念和多线程模型

    目录 1.知识总览 2.什么是线程,为什么要引入线程 3.引入线程机制后,有什么变化 4.线程有哪些重要的属性 5.线程的实现方式 5.1 用户级线程 5.2 内核级线程 6.多线程模型 1.知识总览 ...

  7. 2.1.5 线程概念和多线程模型

    目录 思维导图 啥是线程,为什么要引入线程? 引入线程机制后,有啥变化? 线程的属性 线程的实现方式 用户级线程 内核级线程 组合方式 多线程模型 多对一模型 一对一模型 多对多模型 思维导图 啥是线 ...

  8. 2.1.5 操作系统之线程概念与多线程模型

    文章目录 0.思维导图 1.为什么要引入线程? 2.什么是线程? 3.引入线程带来的变化及进程与线程的比较 4.线程的属性 5.线程的实现方式 (1)用户级线程 (2)内核级线程 (3)特殊的组合方式 ...

  9. 2.1.5线程概念与多线程模型

    全知识整理目录 操作系统整理的目录,包括了整理的所有操作系统的知识. 概述 在没有线程以前,进程是程序执行流的最小单位.那为什么要引入线程呢? 引入线程主要是为了提高并发量. 例如:你去图书馆看书,一 ...

最新文章

  1. 最新!2022中国大学排名发布
  2. pytorch笔记:Dataloader
  3. javascript:重新加载js文件
  4. php curl用法
  5. activity 点击后传递数据给fragment_Fragment 新特性 : Fragment Result API 使用以及源码分析
  6. ASP.NET数据绑定的记忆碎片
  7. 【Linux】解决用vi修改文件,保存文件时,提示“readonly option is set”
  8. OpenCV运动目标检测背景差法和帧差法的理解
  9. 黑苹果自制声卡仿冒驱动(AppleHDA for ALC269)
  10. 火电厂给水串级控制系统仿真
  11. C#根据银行卡号获取银行
  12. 360显示服务器不可用,谢瑾:autodesk360服务不可用
  13. 基于PaddlePaddle 2.0动态图实现的CRNN文字识别模型
  14. 《用户至上:用户研究方法与实践》用户体验入门
  15. 派森python_python2.7下载-派森(Python)下载v2.7.18 官方正式版【x86|x64】-西西软件下载...
  16. Spring Cloud之微服务概述
  17. 【C++】之内联函数(inline)
  18. 大数据 客户标签体系_基于大数据的用户标签体系建设思路和应用
  19. 2022年如何成为一名优秀的大前端Leader?
  20. Cucumber 1 -- 什么是BDD、Cucumber?它们的关系是什么?

热门文章

  1. 安装ARM交叉编译工具
  2. ai驱动数据安全治理_JupyterLab中的AI驱动的代码完成
  3. 数据科学还是计算机科学_数据科学101
  4. linux事务隔离级别,事务的隔离级别(Transaction isolation levels)2
  5. excel表格行列显示十字定位_WPS表格:Excel表格打印时,如何每页都显示标题行?...
  6. leetcode1219. 黄金矿工(回溯)
  7. lee最短路算法_Lee算法的解释:迷宫运行并找到最短路径
  8. aws lambda_四处奔走:初学者遇到AWS Lambda
  9. 修改innodb_flush_log_at_trx_commit参数提升insert性能
  10. Go-json解码到结构体