王道操作系统考研笔记——2.1.5 线程概念与多线程模型
文章目录
- 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 线程概念与多线程模型相关推荐
- 操作系统学习笔记-2.1.5线程概念和多线程模型
操作系统学习笔记-2019 王道考研 操作系统-2.1.5线程概念和多线程模型 文章目录 5线程概念和多线程模型 5.1知识概览 5.2 什么是线程?为什么要引入线程? 5.3引入线程及之后,有什么变 ...
- 王道操作系统考研笔记——1.1.1 操作系统的概念、功能和目标
如果这篇博客对您有用的话,可以给我点个赞吗,这对我很重要,谢谢!❤️ 文章目录 1.1.1 操作系统的概念.功能和目标 1.1.1.1 操作系统的概念 1.1.1.2 作为系统资源的管理者 1.1.1 ...
- 线程概念和多线程模型【操作系统学习笔记】
11.线程概念和多线程模型
- 【操作系统】—线程概念和多线程模型
[操作系统]-线程概念和多线程模型 本章节学习内容如下 一.什么是线程,为什么要引入线程 线程是一个基本的CPU执行单元,也是程序执行流的最小单位 二.引入线程机制后,有什么变化? 三.线程的属性 线 ...
- (王道408考研操作系统)第二章进程管理-第一节5:线程概念和多线程模型
文章目录 一:引导 二:区别"进程"."线程"和"轻量级进程" (1)进程和线程的关系 (2)Linux中没有真正意义上的线程 (3)轻量级 ...
- 王道 ——线程概念和多线程模型
目录 1.知识总览 2.什么是线程,为什么要引入线程 3.引入线程机制后,有什么变化 4.线程有哪些重要的属性 5.线程的实现方式 5.1 用户级线程 5.2 内核级线程 6.多线程模型 1.知识总览 ...
- 2.1.5 线程概念和多线程模型
目录 思维导图 啥是线程,为什么要引入线程? 引入线程机制后,有啥变化? 线程的属性 线程的实现方式 用户级线程 内核级线程 组合方式 多线程模型 多对一模型 一对一模型 多对多模型 思维导图 啥是线 ...
- 2.1.5 操作系统之线程概念与多线程模型
文章目录 0.思维导图 1.为什么要引入线程? 2.什么是线程? 3.引入线程带来的变化及进程与线程的比较 4.线程的属性 5.线程的实现方式 (1)用户级线程 (2)内核级线程 (3)特殊的组合方式 ...
- 2.1.5线程概念与多线程模型
全知识整理目录 操作系统整理的目录,包括了整理的所有操作系统的知识. 概述 在没有线程以前,进程是程序执行流的最小单位.那为什么要引入线程呢? 引入线程主要是为了提高并发量. 例如:你去图书馆看书,一 ...
最新文章
- 最新!2022中国大学排名发布
- pytorch笔记:Dataloader
- javascript:重新加载js文件
- php curl用法
- activity 点击后传递数据给fragment_Fragment 新特性 : Fragment Result API 使用以及源码分析
- ASP.NET数据绑定的记忆碎片
- 【Linux】解决用vi修改文件,保存文件时,提示“readonly option is set”
- OpenCV运动目标检测背景差法和帧差法的理解
- 黑苹果自制声卡仿冒驱动(AppleHDA for ALC269)
- 火电厂给水串级控制系统仿真
- C#根据银行卡号获取银行
- 360显示服务器不可用,谢瑾:autodesk360服务不可用
- 基于PaddlePaddle 2.0动态图实现的CRNN文字识别模型
- 《用户至上:用户研究方法与实践》用户体验入门
- 派森python_python2.7下载-派森(Python)下载v2.7.18 官方正式版【x86|x64】-西西软件下载...
- Spring Cloud之微服务概述
- 【C++】之内联函数(inline)
- 大数据 客户标签体系_基于大数据的用户标签体系建设思路和应用
- 2022年如何成为一名优秀的大前端Leader?
- Cucumber 1 -- 什么是BDD、Cucumber?它们的关系是什么?
热门文章
- 安装ARM交叉编译工具
- ai驱动数据安全治理_JupyterLab中的AI驱动的代码完成
- 数据科学还是计算机科学_数据科学101
- linux事务隔离级别,事务的隔离级别(Transaction isolation levels)2
- excel表格行列显示十字定位_WPS表格:Excel表格打印时,如何每页都显示标题行?...
- leetcode1219. 黄金矿工(回溯)
- lee最短路算法_Lee算法的解释:迷宫运行并找到最短路径
- aws lambda_四处奔走:初学者遇到AWS Lambda
- 修改innodb_flush_log_at_trx_commit参数提升insert性能
- Go-json解码到结构体