多进程操作系统存在的问题

image.png

 

多进程操作系统他有一个轮询调度器,跑进程A,跑完后切换到跑进程B,跑完后切换到跑进程C。

进程A是否跑完了呢,就切换进程B,因为我们要宏观的,看上去一起执行的每个进程都要执行到,那么我要给进程A多长时间,进程B多长时间呢?

所以调度器就做了一个时间片的切分,规定了时间宽度。一个进程执行的最大时间不能超过时间片,如果超过时间片我就强制切换进程。

如果说进程A没有执行完的话,我已经强制切换进程,那么我可以等待其他进程执行完后,在轮询完一圈后再接着后来执行进程A、进程B、进程C。

这就可以在宏观上看出来3个进程在一起往前走、一起去执行,其实,实际上也是CPU在同一时间干一件事情。

 

多进程/多线程解决了单进程操作系统阻塞问题。进程A堵塞等到超过时间片后就会自动切换到进程B,这样就不会浪费CPU,CPU一直在干活。

多进程/多线程又出现了新的问题。

 

image.png

执行线程A时间片到了之后就去执行线程B时间片到了之后就会执行线程C,这种也到达了宏观的并发,但是中间A->B,B->C之间有切换成本的。

CPU在一个进程切换到下一个进程的时候要保存当前进程的状态,然后去执行下个进程。中间会有系统调用和环境上下文切换,切换就一定有拷贝和赋值

这个一定会浪费时间的。拷贝和赋值也是在计算,所以CPU也是在干活。就把切换成本实际就等于CPU浪费成本。因为它并没有实际计算我们的业务,而是在计算切换。

 

进程/线程的数量越多,切换成本就越大,也就越浪费。

 

image.png

提高CPU的利用率,才是搞性能优化和软件架构层面做的事情。

 

多线程随着同步竞争(如锁、竞争资源冲突等),使得开发设计变得越来越复杂。

他不仅设计复杂,执行起来也复杂。

 

image.png

我遇到一个任务,可能要保证多个任务的并发效果,我可能需要一个线程去承载任务。再来一个任务,我可能承载这个任务的执行。

 

image.png

一个任务一个线程,随着任务不断增多导致CPU的切换频率就越大,导致高消耗CPU。

在操作系统中进程和线程占用内存都挺高的。

多进程操作系统有高消耗调度CPU瓶颈和高内存占用的弊端。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值