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

操作系统-线程的实现方式和多线程模型(用户级线程 内核级线程 多线程模型的情况)和线程的状态,转换,组织,控制

文章目录

线程的实现方式和多线程模型

总览

在这里插入图片描述

线程的实现方式

用户级线程

程序自己通过自己设计的线程库实现线程管理调度

如QQ有三个功能,这三个功能需要同时进行,通过进程实现就是三个进程分别实现这三个功能

在这里插入图片描述
如果由一个进程实现?相当于并发执行三个功能
在这里插入图片描述

线程的管理工作:由线程库(如上面通过while),不是操作系统。
线程切换由程序自己的线程库来完成,不需要CPU变态
操作系统不能意识到用户级线程的存在,它只是在执行进程的代码,代码中的线程库部分能够实现并发执行各个线程

优点:切换线程只需要在用户态完成
缺点:被阻塞在某段代码时整个进程的其他线程都会阻塞,且多个线程都是运行在一个CPU的(CPU的调度单位依然是进程)

在这里插入图片描述

内核级线程

线程的管理工作由操作系统完成
线程的切换需要CPU变态(需要操作系统介入)

引入内核级线程后,CPU调度的基本单位是线程,多个线程也可以分派到多个CPU上并行运行

在这里插入图片描述

多线程模型

一对一

在这里插入图片描述

多对一

在这里插入图片描述

多对多

此时内核级线程与用户级线程的对应关系由有两种
一个内核级线程对应多个用户级线程就是之前的多对一的情况
而一个内核级线程对应一个用户级线程就是之前的一对一情况

在这里插入图片描述

小结

在这里插入图片描述

线程的状态,转换,组织,控制

总览

线程的状态和转换与进程的差不多
在这里插入图片描述

线程的状态与转换

时间用完是并发执行中的轮换的原因

我们通常关注这三个状态
在这里插入图片描述

线程的组织与控制

保存堆栈指针是在保存该线程的栈顶地址和栈底地址,切换线程后,该线程的堆栈信息依然在内存中

组织线程表的类型可以不同,如将系统的线程都组成一张表,或者按照进程来组成线程表,又或者按照线程状态来分状态组织线程表

在这里插入图片描述
控制就是实现线程状态的切换和线程的调度

http://www.lryc.cn/news/291144.html

相关文章:

  • 计算机网络 应用层
  • 拥有你的微调大模型,零代码定制+算力免费送
  • 《Docker技术革命:从虚拟机到容器化,全面解析Docker的原理与应用-上篇》
  • C,C++,C# 的区别
  • 操作筛选器的 1 个应用实例:自动启用事务
  • 搭建基于Java的分布式爬虫系统
  • rancher证书过期问题处理
  • Spring Boot 中文件上传
  • 2023年06月CCF-GESP编程能力等级认证Python编程一级真题解析
  • unity 使用数字图片来代替数字0到9显示
  • 单片机如何实现延时1ms或者1us
  • 全国网络安全行业职业技能大赛WP
  • 【Python函数与模块】(7)模块的分类与好处
  • 如何安全地多开Facebook/Twitter/TK/Ins等账号?
  • ChatGPT学python: 用json文件传参
  • 【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
  • 已实现:vue、h5项目如何使用echarts实现雷达图、六边形图表
  • JUC并发编程-四大函数式接口、Stream 流式计算、ForkJoin并行执行任务
  • 【Tomcat与网络4】Tomcat的连接器设计
  • k8s中调整Pod数量限制的方法
  • 在Java中,实现扩展性通常有几种方法,其中包括接口、抽象类、插件架构和服务加载等方式
  • 【乳腺肿瘤诊断分类及预测】基于自适应SPREAD-PNN概率神经网络
  • 蓝桥杯AT24C02问题记录
  • adb控制设备状态
  • 订婚支出及共同生活消费是否属于彩礼?应否返还?
  • MicroPython核心:优化
  • Opencv——霍夫变换
  • Github 2024-01-28 开源项目日报Top10
  • 【大数据安全】大数据安全的挑战与对策基础设施安全
  • 【LLM多模态】Cogview3、DALL-E3、CogVLM、CogVideo模型