进程和线程的区别,为什么线程切换代价小?

什么是进程

一个程序一般对应一个进程,每个程序在执行过程中肯定要获得一些资源,一块属于自己的地盘,因此系统就把这些东西划分出来给一个进程,这个程序的所有操作都在进程里完成。进程就相当于一个工厂,不仅有自己的厂房,所需要的物料、机器以及工人和产品等。
因此进程是操作系统进行资源分配和调度的一个基本单位。

什么是线程

一个进程最少有一个线程,线程可以实现把进程所需要执行的工作再次细分的能力。上面把进程比喻成一个工厂,那么线程就是工厂里的一条流水线,多个线程就是多个流水线,这些流水线相互之间独立,拥有自己加工的数据、自己的产品等,但共享工厂内的资源,例如水电,原料、厂房空间等。
因此线程可以工厂进程拥有的资源,但独享自己指令指针、栈指针等寄存器。

因此,线程比进程更轻量,更灵活,切换线程所需要的代价小于进程。

为什么进程切换代价更高

现在都采用轮转时间片的方式去运行,当切换进程时,需要保存进程的执行现场,然后去执行下一个进程,恢复执行时,首先要恢复执行现场,才能继续执行。切换线程也是同样的道理,需要保存线程的执行现场,但是在进程内切换线程,进程的资源是共享的不用切换。

在虚拟内存那边文章里说过,程序运行时,CPU拿到的也是线性地址,需要将其转换到物理地址。这个任务交给CPU中的内存管理单元MMU负责,但是从内存中查询数据是及其缓慢的,因此每次查询时会将已经转换过的映射信息缓存到TLB中,再转换地址时先从TLB中查找,如果没有再去页表中查询。
而如果切换进程的话,TLB的缓存就会失效,而切换线程则不会影响TLB。因此这是切换进程代价比较高的一点原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LSY_HELLOWORLD

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值