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

操作系统-lecture5(线程)

进程的缺点

在这里插入图片描述
在创建了子进程的时候,得到了可以并发执行的好处
但创建了进程资源会造成浪费

线程的引入

在这里插入图片描述
在同一个进程中有这样两个执行流,为并发执行的,称之为线程
这里引用下《操作系统概念》中的线程概述
在这里插入图片描述

任务举例

在这里插入图片描述
在复制的过程中,CPU在执行其他的任务了
这个时候文件数据很大,用户想终止任务,但此时没有任何按钮可以给用户终止,此时只能够通过强制关闭复制进程才可以结束,但这样对用户不友好

在这里插入图片描述
再进行任务改进,此时有两条任务流,一条进行copy操作,另一条执行wait操作,等待一个信号

执行过程:
1,进程CPU执行操作任务,这个时候世纪执行任务的都是线程了
2,此时thread1开始工作,启动io指令,去执行copy操作,此时thread1进入waiting,此时CPU为其他的线程服务
3,此时用户想要取消任务,点击了取消按钮,此时2号线程执行准备终止任务,但此时拿不到CPU的时间片,得等待其他的任务执行完成,此时进入ready状态
4,当某一时刻调度成功了,thread2的代码CPU开始执行
5,此时线程2的执行内容为:通知线程1停止拷贝
6,线程1进入ready状态

那为啥用进程不可以执行这件任务呢
在这里插入图片描述

使用线程在同个内存区域完成
但使用进程需使用两个内存空间,之间的通信成本很高
因此用线程来完成这个任务

采用多进程的开销

在这里插入图片描述

在进程与进程的切换过程中,中间等待的时间有很长,当进程的数量越多,可能大多在执行进程切换的工作,而很少的时间去为应用程序而服务

线程引入的动机

一个应用通常需要同时处理很多工作,比如一个Web浏览器,可能需要同时处理文字和图片,这些同时执行的任务可称为“执行流”,我们不希望它们是顺序执行的。
早期,每个执行流都要创建一个进程来实现,但是进程的创建需要消耗大量的时间和资源。
现在,和一个应用相关的所有执行任务都装在一个进程里,这些进程内部的执行任务就是“线程”(Thread)。
在这里插入图片描述

线程的定义

在这里插入图片描述

A thread is a basic unit of CPU utilization;it comprises a thread id,a program counter,a
register set, and a stack
线程是 CPU 利⽤的基本单位;它包括线程id(tid)、程序计数器、寄存器集和堆栈

It shares with other threads belonging to the same process its code section, data section, and other operating-system resources, such as open files and signals.
它与属于同⼀进程的其他线程共享其代码段、数据段和其他操作系统资源,例如打开的⽂件和信号。

A traditional(or heavyweight) process has a single thread of control.If a process has multiple threads of control, it can perform more than one task at a time.
传统(或重量级)进程有⼀个控制线程。如果⼀个进程有多个控制线程,它⼀次可以执⾏多个任务。

线程

在这里插入图片描述

多线程的好处

在这里插入图片描述
在这里插入图片描述

响应性:在多个客户端都想要请求服务端进行任务执行的时候,多个线程可以快速响应去执行对应的任务
资源共享:多线程处于同个内存空间中,线程之间通信比跨内存的多进程通信容易
经济:开辟新的进程需要有很大的资源开销
可伸缩性:当在单核计算机中,t1、t2、t3在执行任务,但同一时刻CPU只会执行其中一个,共用同个CPU,为并发线程,但在多核CPU计算机当中,可以t1、t2、t3各占用一个CPU,此时并发运算次变成了并行运算,在单核与多核的切换非常灵活

多核编程

在这里插入图片描述

多线程模型

在这里插入图片描述

M:1模型

在这里插入图片描述

1:1模型

在这里插入图片描述

M:M模型

线程库

在这里插入图片描述

PTHREADS

在这里插入图片描述
参考
B站操作系统

http://www.dtcms.com/a/311547.html

相关文章:

  • Terraria 服务端部署(Docker)
  • Trae + Notion MCP:将你的Notion数据库升级为智能对话机器人
  • 自动驾驶中的传感器技术14——Camera(5)
  • C#开发入门指南_学习笔记
  • Clickhouse#表记录转换为insert语句
  • 回归预测 | Matlab实现CNN-LSTM-Multihead-Attention多变量回归预测
  • Spring AI MCP 技术深度解析:从工具集成到企业级实战
  • PyQt6教程(003):运行QTDesigner生成的UI文件
  • 零基础 “入坑” Java--- 十六、字符串String 异常
  • 深入理解C++中的Lazy Evaluation:延迟计算的艺术
  • 搜索与图论(最小生成树 二分图)
  • 无人机光伏巡检漏检率↓78%!陌讯多模态融合算法实战解析
  • 关于解决wandb无法连接的问题(timed out problem)
  • spring学习笔记三
  • pyqt5显示任务栏菜单并隐藏主窗口,环境pyqt5+vscode
  • Python序列去重高级指南:保持顺序的高效去重技术
  • python:如何调节机器学习算法的鲁棒性,以支持向量机SVM为例,让伙伴们看的更明白
  • Linux 系统管理-15-OpenSSH 服务管理
  • NLP——Transformer
  • flutter实时播报的桌面应用遇到的问题
  • I2C(韦东山HAL库)
  • 2023年ASOC SCI2区TOP,可修灰狼优化算法RGWO+燃料电池参数辨识,深度解析+性能实测
  • 【无标题】根据11维拓扑量子色动力学模型(11D-TQCD)与当代宇宙学理论的融合分析,宇宙轮回的终结机制及其最终状态可系统论述如下:
  • 商品中台数据库设计
  • WPFC#超市管理系统(4)入库管理
  • 音视频学习(四十八):PCM和WAV
  • 基于深度学习的医学图像分析:使用GAN实现医学图像增强
  • 进阶向:Python生成艺术图案(分形、数学曲线)
  • MySQL索引解析
  • vue3pinia