经典面试题:进程、线程、协程开销问题,为什么进程切换的开销比线程的大?

上下文切换的过程?

上下文切换是操作系统在将CPU从一个进程切换到另一个进程时所执行的过程。它涉及保存当前执行进程的状态并加载下一个将要执行的进程的状态。下面是上下文切换的详细过程:

  1. 保存当前进程的上下文
  • 当操作系统决定切换到另一个进程时,首先需要保存当前正在执行的进程的执行状态。
  • 这包括将当前进程的寄存器状态(如通用寄存器、程序计数器PC、栈指针等)保存到进程控制块(PCB)中。
  • 操作系统还可能会保存其他与进程相关的状态信息,如页表、内存映射、打开的文件等。
  1. 选择新进程
  • 操作系统根据调度算法从就绪队列中选择下一个要执行的进程。
  • 这个选择可能基于各种因素,如优先级、时间片大小、进程状态等。
  1. 加载新进程的上下文
  • 一旦新进程被选择,操作系统需要加载该进程的执行状态,以便CPU可以开始执行该进程。
  • 这包括从该进程的PCB中恢复寄存器状态,如通用寄存器、程序计数器PC、栈指针等。
  • 操作系统还可能恢复其他与进程相关的状态信息,如页表、内存映射、打开的文件等。
  1. 更新调度信息
  • 在进行上下文切换后,操作系统可能需要更新调度信息,如更新就绪队列、时间片计数等。
  • 这确保了系统可以继续有效地调度进程,并避免出现死锁或其他资源争用问题。
  1. 切换到新进程执行
  • 一旦新进程的上下文被加载到CPU中,CPU开始执行新进程的代码。
  • 新进程从其上次中断或被抢占的位置继续执行。

进程、线程、协程切换的开销?

  1. 进程切换的开销
  • 进程切换涉及到从一个进程切换到另一个进程,因此需要保存和恢复大量的上下文信息,包括寄存器状态、内存映射、文件描述符等。
  • 进程切换的开销通常较大,因为它需要切换整个进程的上下文,可能涉及到内存的切换和页面交换等操作。
  • 由于进程之间是相互隔离的,切换进程需要操作系统进行较多的工作,包括内存管理、权限检查等,因此进程切换的开销相对较大。
  1. 线程切换的开销
  • 线程是在同一个进程内部运行的,因此线程切换的开销相对较小。
  • 线程切换只需要保存和恢复线程的寄存器状态和堆栈信息等少量上下文信息。
  • 由于线程共享进程的地址空间和其他资源,线程切换无需进行内存管理或权限检查等操作,因此开销较进程切换要小。
  1. 协程切换的开销
  • 协程是轻量级的用户态线程,其切换开销比进程和线程都要小。
  • 协程切换只需要保存和恢复协程的栈帧信息,以及一些额外的状态信息,如指令指针等。
  • 由于协程是在用户态管理的,无需涉及操作系统的内核调度和内存管理,因此协程切换的开销最小。

为什么进程切换的开销比线程的大?

  • 进程是系统资源的基本单位,它们之间是相互隔离的,切换进程需要操作系统进行大量的内存管理和权限检查等工作,因此开销较大。
  • 各个进程之间可能拥有独立的内存空间,切换进程需要进行内存页的切换和可能的页面交换,把虚拟地址转换为物理地址需要查页表,查页表是很慢的过程,转换检测缓冲区 TLB 可以提高页表查询速度就是一个缓存,页表切换后 TLB 就会失效,命中率就会变低,切换过程就会慢,线程则不需要切换地址空间所以开销比较小。

为什么线程切换的开销比协程的大?

协程切换比线程切换开销小的主要原因有以下几点:

  1. 用户空间操作: 协程通常在用户空间内管理,切换时不需要陷入内核态,而线程切换涉及内核态和用户态之间的切换。由于内核态切换通常涉及到上下文的保存和恢复,以及内核数据结构的操作,开销较大。
  2. 轻量级调度: 协程的调度是由用户程序自行控制的,通常采用协作式调度,用户程序在适当的时机主动让出CPU,切换到其他协程。这种调度方式不需要内核的介入,开销较小。
  3. 上下文切换成本低: 协程切换通常只涉及保存和恢复协程的执行上下文,如栈指针、寄存器等,这个过程在用户空间内完成,不涉及内核调度器和内核态的切换,因此开销较小。
  4. 无需同步原语: 在线程切换时,通常需要考虑同步原语(如互斥锁、条件变量)的状态和处理,以确保线程间的数据一致性。而在协程切换时,通常不需要考虑这些同步原语,因为协程之间共享同一个线程的地址空间,不涉及多线程之间的竞争和同步。

协程切换比线程切换开销小的主要原因是协程在用户空间内管理,不涉及内核态和用户态之间的切换,调度方式轻量级,上下文切换成本低,且无需考虑同步原语等因素。这使得协程在高并发、IO密集型等场景下具有较好的性能和效率。

什么是 TLB?

TLB(Translation Lookaside Buffer,译码后备缓冲器)是一种硬件缓存,存储了最近使用的虚拟地址到物理地址的映射关系,用于加速虚拟地址到物理地址的转换过程。在现代计算机体系结构中,TLB通常被用于处理虚拟内存系统中的地址转换。由于TLB的容量有限,如果访问的虚拟地址不在TLB中,就会发生TLB缺失(TLB Miss),此时需要访问MMU进行地址转换,并将新的映射关系加载到TLB中。因此,TLB的命中率直接影响了系统的性能表现。

  1. 加速地址转换: TLB存储了虚拟地址到物理地址的映射关系,当CPU需要访问内存时,先在TLB中查找对应的物理地址,如果命中则直接获取物理地址,避免了访问内存管理单元(MMU)进行地址转换的开销。
  2. 减少内存访问延迟: 由于TLB位于CPU芯片内部,其访问速度远高于访问主存的速度,因此能够大大减少内存访问的延迟,提高程序执行效率。
  3. 提高性能: TLB的存在可以大幅度提高系统的性能,特别是在需要频繁进行地址转换的应用场景下,如多任务操作系统、虚拟化环境等。

为什么每次切换 TLB 都会失效?

TLB(Translation Lookaside Buffer,译码后备缓冲器)每次失效的原因主要有以下几点:

  1. 容量限制: TLB是一个硬件缓存,其容量通常比较有限。当系统中的虚拟地址空间非常大时,TLB无法存储所有的虚拟地址到物理地址的映射关系,因此会发生TLB失效。
  2. 进程切换: 在多任务操作系统中,每个进程都有自己的虚拟地址空间,当发生进程切换时,当前进程的虚拟地址空间会被替换为下一个进程的虚拟地址空间。由于不同进程的虚拟地址空间可能不同,因此TLB中存储的映射关系就会失效。
  3. 页表更新: 虚拟地址到物理地址的映射关系是由操作系统的页表管理的,当页表发生变化时(如页面置换、页表更新等),TLB中存储的映射关系也会失效。
  4. 地址空间切换: 在虚拟化环境中,虚拟机之间的地址空间是相互隔离的,当虚拟机切换时,TLB中存储的映射关系也会失效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/15910.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浪潮信息IPF24:AI+时代,创新驱动未来,携手共创智慧新纪元

如今,数字化时代的浪潮席卷全球,人工智能已经成为推动社会进步的重要引擎。浪潮信息IPF24作为行业领先的AI技术盛会,不仅为业界提供了交流合作的平台,更在激发创新活力、拓展发展路径、加速AI技术落地等方面发挥了重要作用。 升级…

OS复习笔记ch6-2

死锁的解决 死锁的预防(打疫苗)死锁的避免(戴口罩)死锁的检测(做核酸) 死锁的预防 前面我们提到了死锁的四个必要条件 防止前三个必要条件,就是间接预防防止最后一个必要条件–循环等待&…

软测刷题-错题1

提高测试效率的方法: 1、不要做无效的测试 2.不要做重复的测试 3.不同测试版本的测试侧重点 4.优化测试顺序 LoadRunner是对服务器进行施压。 在数据库中存在的用户数是指注册用户数。 input标签可以直接使用send_keys实现上传,而非input标签是无法直…

Rust后台管理系统Salvo-admin源码编译

1.克隆salvo-admin后台管理系统源码: https://github.com/lyqgit/salvo-admin.git 2.编译 编译成功 3.创建mysql数据库与执行sql脚本 输入名称ry-vue 执行sql脚本 全部执行上面3个sql 修改数据库用户名与密码: 清理及重新编译 cargo clean cargo build 4.运行并测试 cargo…

Android内存碎片化调优

概念 内存碎片分为两种,一种是内存页中的碎片,被称为内部碎片;另一种是空闲分散的内存页,凑不齐一个组物理地址连续的空闲内存页,就没办法分配了,这些散落的内存页被称为外部碎片。 在Android系统中,内存碎片化是指内存中存在很多小块的空闲内存,这些内存块之间不连续…

使用vue,mybatis,mysql,tomcat,axios实现简单的登录注册功能

目录 第一步环境搭建 后端: 前端: 第二步画流程图 web: service: dao层: 第三步前端代码的实现 这是开始的页面,接下来我们要到router路由下书写#login的路径 路由中的component在我们自己创建的views书写vue文件…

单日收益1000+看了就会的项目,最新灵异短视频项目,简单好上手可放大操作

各位好友,佳哥在此与大伙儿聊聊一项神秘莫测的短视频项目。你或许会想,“又是一个视频创作项目?” 但别急,这个项目与众不同,日入千元不再是梦,而且它的易用性让人惊喜,无论你是初学者还是资深玩…

春秋云境CVE-2018-7422

简介 WordPress Plugin Site Editor LFI 正文 1.进入靶场 2.漏洞利用 /wp-content/plugins/site-editor/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php?ajax_path/../../../../../../flag看别人wp做的。不懂怎么弄的,有没有大佬讲一下的

没有电商经验的人去操作抖音小店,难度大不大?好操作吗?

大家好,我是电商小V 很多新手小伙伴想去操作抖音小店项目,咨询的最多的问题就是我没有电商运营的经验可以去操作吗? 当然是可以操作的,抖音小店项目对于新手来说是一个非常友好的项目,很多小伙伴都是感觉没有电商经验去…

数据库攻防之MySQL

MySQL 是最流行的关系型数据库,与此同时也是 web 应用中最好的关系型数据库管理应用软件。我们在渗透过程中碰到的 PHP 站点大部分都会搭配 MySQL 数据库,因此它是红队攻防中最常遇到的数据库。 0x01 MySQL简介 MySQL 是典型的关系型数据库,…

YOLOv10 | 无NMS的YOLO | 实时端到端目标检测的新突破

过去几年里,YOLOs因在计算成本和检测性能之间实现有效平衡而成为实时目标检测领域的主流范式。研究人员针对YOLOs的结构设计、优化目标、数据增强策略等进行了深入探索,并取得了显著进展。然而,对非极大值抑制(NMS)的后…

redis--消息队列

分类 生产者消费模式 发布者订阅模式 生产者消费模式 在生产者消费者(Producer/Consumer)模式下,上层应用接收到的外部请求后开始处理其当前步骤的操作,在执行完成后将已经完成的操作发送至指定的频道(channel)当中,并由其下层的应用监听…

【Chrono Engine学习总结】6-创建自定义场景-6.2-chrono中的光线设置

由于Chrono的官方教程在一些细节方面解释的并不清楚,自己做了一些尝试,做学习总结。 上一篇文章中,自己【用sketchup重建了三维场景】,但导入chrono中颜色很不正确,几乎都是白色的,但也不是完全白色。经过…

IDE上传本地仓库到GitHub

IDE上传本地仓库到GitHub 1、选择远程仓库平台2、下载安装Git3、IDE集成Git4、本地项目上传GitHub 1、选择远程仓库平台 1.1、注册远程仓库平台 常见的远程仓库托管平台有: 1)GitHub 域名:https://github.com 介绍:GitHub是全球最…

Java订餐系统源码 springboot点菜系统源码

Java订餐系统源码 springboot点菜系统源码 源码下载地址:https://download.csdn.net/download/xiaohua1992/89341358 功能介绍: 前台登录:前台登录: ①首页:菜品信息推荐、菜品信息展示、查看更多 ②菜品信息&…

Stanford斯坦福 CS 224R: 深度强化学习 (3)

基于模型的强化学习 强化学习(RL)旨在让智能体通过与环境互动来学习最优策略,从而最大化累积奖励。传统的强化学习方法如Q-learning、策略梯度等,通过大量的试错来学习值函数或策略,样本效率较低。而基于模型的强化学习(MBRL)则利用对环境的预测模型来加速学习过程,大大提高了…

参数的本质:详解 JavaScript 函数的参数

文章导读:AI 辅助学习前端,包含入门、进阶、高级部分前端系列内容,当前是 JavaScript 的部分,瑶琴会持续更新,适合零基础的朋友,已有前端工作经验的可以不看,也可以当作基础知识回顾。 上篇文章…

地理信息系统(GIS)软件开发

地理信息系统(GIS)软件开发是一项复杂且系统性很强的工程,涉及空间数据的采集、管理、分析和展示。以下是一个典型的GIS软件开发流程,包括各个步骤的详细说明。北京木奇移动技术有限公司,专业的软件外包开发公司&#…

面向对象------多态

1.多态的定义 通俗来说,当同一种行为或者事情发生在不同的对象上,这些行为或者事情最终得到的结果不同。 注意:多态要发生在继承的基础上。 例如:彩色打印机和黑白打印机。 彩色打印机和黑白打印机是不同的对象,但…

详细分析Element中的MessageBox基本知识(附Demo)

目录 前言1. 基本知识2. Demo2.1 确认框2.2 警告框2.3 对话框 3. this.$confirm 前言 详细知识推荐阅读:详细分析Element Plus中的ElMessageBox弹窗用法(附Demo及模版) MessageBox则常用于Vue2 1. 基本知识 MessageBox 是 Element UI 提供…