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

操作系统线程

进程那一章,我们留下了一个问题
在这里插入图片描述第一个cpu调用进程,进程调用i/o设备,主动进入ready 队列
第二个cpu将程序执行时间平均分时,进程执行时间到
第三个fork函数,我们上一章的lab有实践,可以看出是父进程主动条用fork函数产生子进程
第四个interrupt,上一章我们有演示wait等待,所以这个也是主动的。
在这里插入图片描述上一章我们做的实验可以看出,这里的执行流内存不一样,pid不一样,但子进程的内存数据是clone父进程的。
这里有个坏处
在这里插入图片描述如果能在一个进程当中出现两个一样的执行流,这两个执行流共享内存空间
我们管这样的方式叫做并发的线程

多进程通信和多线程通信的区别:
多进程通信如父进程正在进行copy文件,而子进程有一个取消按钮
在这里插入图片描述点击之后取消按钮产生一个子进程,父进程等待子进程执行,发现子进程是中断父进程

多线程通信 父线程1在copy文件,产生n个子线程(因为可能要copy多个文件夹),然后当点击取消时,产生要给wait abouting线程,去通知父线程取消copy文件。
在这里插入图片描述两者的区别在于,点击取消事件时,进程会产生一此clone,子进程要clone父进程,产生一个内存空间
在这里插入图片描述这里需要实验进行演示,不然不好理解。

进程切换开销
在这里插入图片描述我们推出线程这个概念的动机

在这里插入图片描述线程的定义
下面我们可以看到单线程的单进程只有一个PCB+code+date区域;而单进程多线程是共享code+data+files区域的。其实就是共享了存储数据、代码、全局变量,但每个线程都有自己的堆栈空间和寄存
在这里插入图片描述单cpu多线程
线程并发,需要来回切换
在这里插入图片描述多cpu多线程
多线程在多cpu环境下也可以设置为并行模式
在这里插入图片描述现在操作系统的线程概念
在这里插入图片描述多核编程
我们需要设计程序时将多核的性能应用起来,不然全是顺序执行的单进程单线程的应用,完全是浪费资源的行为。
在这里插入图片描述多核线程模型
在这里插入图片描述多线程模型
多对一模型,用户线程在用户模式下一个进程有多个线程,这个进程对应一个内核线程,这个进程有多个线程,也就达成了多个用户线程对应一个内核线程
在这里插入图片描述如果只有一个内核
虽然我们也有多个进程(执行流),在用户感觉上是多个进程并行,但是其实因为我们只有一个内核,所以一次只能运行一个线程,所以这里还是并发,但这里不止是进程的并发,也是线程的并发,上面那个一对多每个进程最少有一个线程可以和其他进程进行并发,这就是单核和多核的区别。
在这里插入图片描述

一对一
这里可以看出不管是进程还是线程都做到一对一,实现逻辑上基本可以说这些进程是并行的,但是这也取决于核心数量

在这里插入图片描述多对多
多路复用,取决于cpu的调度,每个进程的开销不一样,需要cpu进行调度去分配内核线程

在这里插入图片描述线程库
linux关注于posix pthread 这个p代表用户线程和内核线程都可以被创建

在这里插入图片描述

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

相关文章:

  • vue3中如何定义响应式变量
  • 【C++修炼之路】20.手撕红黑树
  • 树状数组(高级数据结构)-蓝桥杯
  • Flink-多流转换(Union、Connect、Join)
  • kubeadmin安装k8s集群
  • java3月train笔记
  • Apollo Config原理浅析
  • Kubernetes二 Kubernetes之实战以及pod详解
  • 机械革命黑苹果改造计划第四番-外接显示器、win时间不正确问题解决
  • Linux docker(03)可使用GPU渲染的x11docker实战总结
  • 【Linux操作系统】【综合实验一 Linux操作基础】
  • 关于监控服务器指标、CPU、内存、警报的一些解决方案
  • vue3全家桶技术栈基础(一)
  • 群晖-第2章-设置HTTPS访问
  • 005 利用fidder抓取app的api,获得股票数据
  • 京东测试进阶之路:初入测试碎碎念篇
  • 华为OD机试 - 乘积最大值(JavaScript) | 机试题+算法思路+考点+代码解析 【2023】
  • Java并发知识点
  • 前端 ES6 环境下 require 动态引入图片以及问题
  • PCL 欧氏聚类分割
  • 一台服务器最大能支持多少条TCP连接
  • Teradata退出中国,您可以相信中国数据库!
  • markdown组合数学公式
  • Golang实践录:一个字符串比较示例
  • Linux后台开发工具箱-葵花宝典
  • http的请求上下文
  • 【MySQL】MySQL表的增删改查(进阶)
  • C++ Primer Plus习题及答案-第十八章
  • Redis事务控制
  • Springcloud OpenFeign 详解