目录

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

1、知识总览

2、什么是线程,为什么要引入线程

在引入进程之前,系统中各个程序只能串行执行;引入进程之后,系统中各个进程之间可以并发执行;

比如QQ程序,QQ可以用来视频、文字聊天、传送文件等;在操作系统中,进程是程序的一次执行,但这些功能显然不可能是由一个程序顺序处理就能实现的;如果是顺序处理,则视频与文字聊天是不可能同时发生的;

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

传统的进程是程序执行流的最小单位,也就是说CPU处理的是一个个进程;在进程中引入了线程后,CPU的调度服务对象不再是进程,而是进程中的线程,每一个进程中可能包含多个线程,CPU会轮流地为线程进行服务;

一个进程可以细分为多个线程,通过线程的并发执行。QQ就能同时进行文字发送和视频聊天;

引入了线程机制后,线程成为了程序执行流的最小单位;

可以把线程理解为“轻量级的进程”,线程是一个基本的CPU执行单元,也是程序执行流的最小单位;

引入线程之后,不仅进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发性,使得一个进程内也可以并发处理各种任务(如QQ视频、文字聊天、传文件等);

引入线程之后,进程不再是程序执行流的最小单元,进程只作为除CPU之外的系统资源的分配单元(如打印机、内存地址空间等都是分配给进程的);

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

资源分配、调度:

  • 传统进程机制中,进程是资源分配、调度的基本单位;
  • 引入线程后,进程是资源分配的基本单位,线程是调度的基本单位;

并发性:

  • 传统进程机制中,只能进程间并发;
  • 引入线程后,各线程间也能并发,提升了并发度;

系统开销:

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

类比: 去图书馆看书

  • 切换进程环境:有一个不认识的人要用桌子,需要把自己的书收走,他把自己的书放到桌子上;
  • 同一进程内的线程切换 == 你的舍友要用这张书桌,可以不把桌子上的书收走;

4、线程有哪些重要的属性

  • 线程是处理机调度的单位;
  • 多CPU计算机中,各个线程可占用不同的CPU;
  • 每个线程都有一个线程ID、线程控制块TCB;
  • 线程也有就绪、堵塞、运行三种基本状态;
  • 线程几乎不拥有系统资源;
  • 同一进程的不同线程间共享进程的资源;
  • 由于共享内存地址空间,同一进程中的线程间通信甚至无需系统干预;
  • 同一进程中的线程切换,不会引起进程切换;
  • 不同进程中的线程切换,会引起进程切换;
  • 切换同进程内的线程,系统开销很小;
  • 切换进程,系统开销较大;

5、线程的实现方式

线程的实现方式有两种:用户级线程和内核级线程;

5.1 用户级线程

用户级线程是由应用程序通过线程库实现;

所有的线程管理工作都由应用程序负责(包括线程切换);

用户级线程中,线程切换可以在用户态下即可完成,无需操作系统干预;

在用户看来,是有多个线程,但是在操作系统内核看来,并意识不到线程的存在。(用户级线程对用户不透明,对操作系统透明);

可以这样理解,“用户级线程”就是“从用户视角看能看到的线程”

5.2 内核级线程

内核级线程,又称“内核支持的线程”;

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

可以这样理解,“内核级线程”就是“从操作系统内核视角能看到的线程”;

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

重点重点重点:

操作系统只看得见内核级线程,因此只有内核级线程才是处理机分配的单位;

6、多线程模型

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

多线程模型分为三种:

  • 多对一模型:多个用户及线程映射到一个内核级线程。每个用户进程只对应一个内核级线程;
    - 优点:用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的系统开销小,效率高;
    - 缺点:当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。多个线程不可在多核处理机上并行运行;
  • 一对一模型:一个用户及线程映射到一个内核级线程。每个用户进程有与用户级线程同数量的内核级线程;
    - 优点:当一个线程被阻塞后,别的线程还可以继续执行,并发能力强。多线程可在多核处理机上并行执行;
    - 缺点:一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大;
  • 多对多模型:n用户及线程映射到m个内核级线程(n>=m)。每个用户进程对应m个内核级线程;
    - 克服了多对一模型并发度不高的缺点,又克服了一对一模型中一个用户进程占用太多内核级线程,开销太大的缺点;

王道 ——线程概念和多线程模型相关推荐

  1. 王道操作系统考研笔记——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. ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. 线程的概念和多线程模型

    文章目录 5.线程概念和多线程模型 5.1.为什么要引入线程 5.2.什么是线程 5.3.线程引入后带来的变化 5.4.线程的属性 5.5.线程的实现方式 5.5.1.用户级线程 5.5.2.内核级线 ...

最新文章

  1. 如何选择真正的万兆防火墙?
  2. 职工信息管理程序设计c语言,C语言程序设计职工信息管理系统.docx
  3. 批量obj格式直接转gltf
  4. Visual Studio提示Bonjour backend初始化失败
  5. ArrayList 源码阅读记录
  6. 错误:unrecognized command line option “-std=c++11”
  7. 怎么在pptv里下载电视剧
  8. LODOP打印当前日期时间的方法
  9. Vue File Manager – PHP即时存储、共享和获取文件基于VUE v2.2.0.2
  10. php微信客服接口,微信公众平台开发:多客服接口说明
  11. 如何让技术大佬失去理智
  12. Windows-Server2003 关闭IE增强的安全配置堵塞方法
  13. PCIe扫盲——PCIe错误源详解(一)
  14. Ubuntu 下用tar 命令打包文件
  15. 机器学习基础补习11---聚类
  16. 通过品牌和型号查询车轴接口文档
  17. php 星座,PHP根据年月日期计算所属星座名
  18. VR全景视频目前的瓶颈和挑战
  19. 神庙逃亡2、愤怒的小鸟,1.8万款APP被指违反谷歌策略跟踪用户
  20. 第十届蓝桥杯单片机国赛代码实现

热门文章

  1. 通过Repository Manager 1.3来管理戴尔驱动程序更新
  2. 看我出招之:svchost.exe文件删不得
  3. 浏览器 JavaScript HTTP 库的大比拼:SugerAgent VS Axios
  4. oracle生成excle报表,oracle自动生成excel报表(时间为变量,条件含变量)
  5. 多线程同步 通过实现Runnable的示例
  6. admin 系统被嵌套在第三方系统中的跨域异常
  7. 【Java】使用For和递归解决不死神兔问题,求第20个月兔子的对数
  8. 【Python】画一个心形
  9. 【C语言】求1到100的和
  10. C#LeetCode刷题之#415-字符串相加(Add Strings)