当前位置: 首页 > news >正文

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

文章目录

  • 为什么要引入线程
  • 什么是线程
  • 引入线程带来的变化及进程与线程的比较
  • 线程的属性
  • 线程的实现方式
      • 用户线程
      • 内核线程
      • 特殊的组合方式及重点注意
  • 多线程模型
      • 多对一模型
      • 一对一模型
      • 多对多模型

为什么要引入线程

image-20221027124847045

在这里插入图片描述

  • 引入进程是为了让程序能够并发的执行,因为进程只能
  • 而引入线程类似套娃,是为了进程内也能并发的执行,是因为业务的需要,比如QQ这个进程,我们可能会需要一边视频一边文字聊天。进程中的这些子任务用线程来实现并发的执行

什么是线程

在这里插入图片描述

  • 可以把线程理解为轻量级的进程
    • 因为一开始进程有两大属性 1进程是可拥有资源的独立单位 2进程是一个可独立调度和分派的基本单位 为了让程序更好的并发,就将两个属性分开,做到轻装上阵
  • 引入线程后,线程是一个基本的CPU执行单元,也是程序执行流的最小单位

引入线程带来的变化及进程与线程的比较

在这里插入图片描述

  • 引入线程之后,资源的分配发生了变化
    • 线程的调度的基本单位,占有的是CPU资源
    • 而其他的系统资源还是分配给进程的,所以进程是资源分配的基本单位
  • 并发性
    • 引入线程后,进程内也能并发执行
  • 系统开销
    • 因为同一个进程的线程共享资源,所以同一个进程的线程切换,不会导致进程环境的切换,系统开销小

线程的属性

在这里插入图片描述

线程的实现方式

  • 线程的实现分为两类:用户级线程(User-Level Thread,UTL)和内核级线程(Kernel-Level Thread, KTL)l。内核级线程又称内核支持的线程

用户线程

在这里插入图片描述

  • 用户级的线程由应用程序通过线程库实现,所有的线程管理工作都由应用程序负责(包括线程切换)
  • 多个线程的对应到一个进程
  • 用户进程和系统进程都是在内核的支持下运行的
  • 在用户看来,是能看到多个线程,但是在操作系统内核看来,并意识不到线程的存在

内核线程

在这里插入图片描述

  • 内核级线程的管理工作由操作系统内核完成,线程调度,切换等工作都由内核负责,因此内核级线程的切换必须在核心态才能完成
  • 也就是说内核级线程就是操作系统内核视角能看到的线程

特殊的组合方式及重点注意

在这里插入图片描述

  • 记住只有内核级线程才是操作系统能看到的线程,想要真正的并行,只有内核级线程才能实现

多线程模型

多对一模型

在这里插入图片描述

  • 多个用户级线程对应一个内核级线程,这样的好处是用户及线程的切换在用户空间就可以完成,不需要切换到核心态,线程管理的系统开销小,效率高
  • 缺点就是 如果一个用户级线程被阻塞,整个进程都会被阻塞,因为只有一个内核级线程,相当只能占有一个CPU的核,并发的在这个CPU的核执行

一对一模型

在这里插入图片描述

  • 一对一就是一个用户级线程对应一个内核级线程,是真正的能实现线程的并行执行
  • 缺点就是 一个用户进程会占有多个内核级线程,线程的切换由操作系统内核完成,这样的开销比较大

多对多模型

在这里插入图片描述

相关文章:

  • Spring中的AOP概念介绍使用、AOP相关术语、切入点表达式(面向切面编程上篇)
  • heic图片转换
  • 数据分析 | Pandas 200道练习题,每日10道题,学完必成大神(2)
  • 2017年某高校848数据结构真题复习
  • python正态分布中的normal函数
  • 场景金融持续引发行业关注,4.0时代打造金融服务新生态
  • 大数据面试重点之mysql篇
  • 【网络安全篇】JavaSript基础内容大全
  • 【数据结构与算法】时间复杂度和空间复杂度
  • 问:毁掉一个人,有多容易?答:年龄到了就可以
  • 最新|全新风格原创YOLOv7、YOLOv5和YOLOX网络结构解析图
  • 100个Python实战项目(十二)Python 并发图像下载器
  • RocketMQ 基础模型
  • java计算机毕业设计校园快递代领系统源程序+mysql+系统+lw文档+远程调试
  • 【Python】列表list
  • 【Leetcode】104. 二叉树的最大深度
  • Android 架构优化~MVP 架构改造
  • Create React App 使用
  • ECMAScript入门(七)--Module语法
  • IndexedDB
  • java中具有继承关系的类及其对象初始化顺序
  • MySQL几个简单SQL的优化
  • NSTimer学习笔记
  • Promise面试题,控制异步流程
  • Puppeteer:浏览器控制器
  • React-生命周期杂记
  • spring + angular 实现导出excel
  • Yeoman_Bower_Grunt
  • 代理模式
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 微服务入门【系列视频课程】
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 译自由幺半群
  • 数据库巡检项
  • #Java第九次作业--输入输出流和文件操作
  • #mysql 8.0 踩坑日记
  • #pragma once
  • #在 README.md 中生成项目目录结构
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (独孤九剑)--文件系统
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (九)c52学习之旅-定时器
  • (离散数学)逻辑连接词
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (译) 函数式 JS #1:简介
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .form文件_SSM框架文件上传篇
  • .netcore如何运行环境安装到Linux服务器