0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

进程切换与线程切换有啥区别

jf_78858299 来源:码农的荒岛求生 作者:码农的荒岛求生 2023-02-24 14:16 次阅读

注意这个题目问的是进程切换与线程切换的区别,不是进程与线程的区别。当然这里的 线程指的是同一个进程中的线程

这个问题能很好的考察面试者对进程和线程的理解深度,有比较高的区分度。

要想正确回答这个问题,面试者需要理解虚拟内存。

虚拟内存解放生产力

对于程序员来说,我们在编程时实际上是不怎么操心内存问题的,对于使用JavaPython、JavaScript等动态类型语言的程序员来说更是如此,自动内存回收机制的引入使得使用这类语言的程序员几乎完全不用关心内存问题;即使对于编译型语言C/C++来说,程序员需要关心的也仅仅是内存的申请和释放。

总的来说,作为程序员(无论使用什么类型的语言)我们根本就不关心数据以及程序被放在了 物理内存的哪个位置上 (设计实现操作系统的程序员除外),我们可以简单的认为我们的程序 独占内存 ,比如在32位系统下我们的进程占用的内存空间为4G;并且我们可以申请超过物理内存大小的空间,比如在只有256MB的系统上程序员可以申请1G大小的内存空间,这种假设极大的解放了程序员的生产力。

而这种假设实现的背后功臣就是虚拟内存。

什么是虚拟内存

虚拟内存是操作系统为每个进程提供的一种抽象,每个进程都有属于自己的、私有的、地址连续的虚拟内存,当然我们知道 最终进程的数据及代码必然要放到物理内存上 ,那么必须有某种机制能记住虚拟地址空间中的某个数据被放到了哪个物理内存地址上,这就是所谓的地址空间映射,也就是虚拟内存地址与物理内存地址的映射关系,那么操作系统是如何记住这种映射关系的呢,答案就是页表,页表中记录了虚拟内存地址到物理内存地址的映射关系。有了页表就可以将虚拟地址转换为物理内存地址了,这种机制就是虚拟内存。

每个进程都有自己的虚拟地址空间,进程内的所有线程共享进程的虚拟地址空间。

现在我们就可以来回答这个面试题了。

进程切换与线程切换的区别

进程切换与线程切换的一个最主要区别就在于进程切换涉及到虚拟地址空间的切换而线程切换则不会。因为每个进程都有自己的虚拟地址空间,而线程是共享所在进程的虚拟地址空间的,因此同一个进程中的线程进行线程切换时不涉及虚拟地址空间的转换。

举一个不太恰当的例子,线程切换就好比你从主卧走到次卧,反正主卧和次卧都在同一个房子中(虚拟地址空间),因此你无需换鞋子、换衣服等等。但是进程切换就不一样了,进程切换就好比从你家到别人家,这是两个不同的房子(不同的虚拟地址空间),出发时要换好衣服、鞋子等等,到别人家后还要再换鞋子等等。

因此我们可以形象的认为线程是处在同一个屋檐下的,这里的屋檐就是虚拟地址空间,因此线程间切换无需虚拟地址空间的切换;而进程则不同,两个不同进程位于不同的屋檐下,即进程位于不同的虚拟地址空间,因此进程切换涉及到虚拟地址空间的切换,这也是为什么进程切换要比线程切换慢的原因。

有的同学可能还是不太明白,为什么虚拟地址空间切换会比较耗时呢?

为什么虚拟地址切换很慢

现在我们已经知道了进程都有自己的虚拟地址空间,把虚拟地址转换为物理地址需要查找页表,页表查找是一个很慢的过程,因此通常使用Cache来缓存常用的地址映射,这样可以加速页表查找,这个cache就是TLB,Translation Lookaside Buffer,我们不需要关心这个名字只需要知道TLB本质上就是一个cache,是用来加速页表查找的。由于每个进程都有自己的虚拟地址空间,那么显然每个进程都有自己的页表,那么当进程切换后页表也要进行切换,页表切换后TLB就失效了,cache失效导致命中率降低,那么虚拟地址转换为物理地址就会变慢,表现出来的就是程序运行会变慢,而线程切换则不会导致TLB失效,因为线程线程无需切换地址空间,因此我们通常说线程切换要比较进程切换块,原因就在这里。

总结

虚拟内存是现代操作系统极其重要的一部分,当然在这里限于篇幅我们只能简单介绍,关于虚拟内存的详细讲解见后续操作系统教程,敬请期待

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4779

    浏览量

    68524
  • 线程
    +关注

    关注

    0

    文章

    504

    浏览量

    19675
  • 进程
    +关注

    关注

    0

    文章

    203

    浏览量

    13960
收藏 人收藏

    评论

    相关推荐

    Linux中进程线程的深度对比

    关于进程线程,在 Linux 中是一对儿很核心的概念。但是进程线程到底有联系,又有
    发表于 10-14 16:47 1304次阅读
    Linux中<b class='flag-5'>进程</b>和<b class='flag-5'>线程</b>的深度对比

    进程线程区别

    线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程区别:(1)地址空间:进程内的一个
    发表于 12-12 09:28

    线程进程、程序的区别

    程序中同时运行多个线程完成不同的工作,称为多线程线程进程区别在于,子进程和父
    发表于 03-23 13:09

    进程线程区别和联系介绍

    之轻装运行;而对拥有资源的基本单位, 又不频繁地对之进行切换。正是在这种思想的指导下,产生了线程概 念。 在引入线程的操作系统中,线程进程
    发表于 07-04 00:18

    请问UCOSIII中的任务调度和任务切换有什么区别

    疑惑:UCOSIII中的任务调度和任务切换有什么区别?原子哥在PPT里面的解释是:任务调度就是中止当前正在运行的任务转而去执行其他的任务。当UCOSIII需要切换到另外一个任务时,它将保存当前任务
    发表于 05-25 07:27

    进程线程区别在哪?

    1、进程线程区别:1. 线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;2. 一个进程
    发表于 07-07 06:53

    线程管理之线程切换

    线程管理之线程切换前言基本信息前言说明PendSV_Handler函数前言基本信息名称描述说明RT-Thread Studio 软件版本版本: 1.1.3RT-Thread 系统版本
    发表于 08-24 08:19

    什么是CDMA软切换?它与硬切换有什么分别?

    什么是CDMA软切换?它与硬切换有什么分别? 移动通讯是建立在移动之中的。有了频率的复用,必然带来移动中的频率切换问题,一个网络质量的
    发表于 06-01 20:27 951次阅读

    什么是CDMA软切换?它与硬切换有什么分别

    什么是CDMA软切换?它与硬切换有什么分别 移动通讯是建立在移动之中的。有了频率的复用,必然带来移动中的频率切换问题,一个网络质
    发表于 06-15 09:42 1288次阅读

    线程进程有哪些区别

    线程进程区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个
    发表于 07-20 07:48 1969次阅读
    <b class='flag-5'>线程</b>与<b class='flag-5'>进程</b>有哪些<b class='flag-5'>区别</b>?

    线程进程区别和联系,线程进程通信方式

    摘要:进程线程都是计算里的两项执行活动,各有特色和优势。下面就来介绍线程进程之间的区别联系以及通信方式。
    发表于 12-08 14:12 1.3w次阅读

    鸿蒙内核源码之线程环境下的任务切换

    在中断环境下,从当前线程切换到目标线程,这种方式也称为硬切换.不由软件控制的被动式切换.哪些情况下会出现硬
    的头像 发表于 04-25 16:48 1460次阅读
    鸿蒙内核源码之<b class='flag-5'>线程</b>环境下的任务<b class='flag-5'>切换</b>

    进程线程分别是什么,它们的区别是什么

    程和线程区别是什么?有什么关系?相信大家对于进程都很熟悉了吧,而线程相对于进程而言,是一个更加接近于执行体的概念,为了让大家更好的了解
    发表于 03-24 17:26 9385次阅读
    <b class='flag-5'>进程</b>和<b class='flag-5'>线程</b>分别是什么,它们的<b class='flag-5'>区别</b>是什么

    进程线程区别

    每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个
    的头像 发表于 05-09 11:06 6011次阅读
    <b class='flag-5'>进程</b>和<b class='flag-5'>线程</b>的<b class='flag-5'>区别</b>

    mcu线程进程区别是什么

    MCU线程进程是嵌入式系统中常见的并行执行的概念,它们之间有许多区别,包括线程进程的定义、资源管理、通信机制、执行方式等等。下面将详细介
    的头像 发表于 01-04 10:45 742次阅读