对于多进程和多线程的理解总结,请老师看一下是否正确
来源:11-9 多线程和多进程对比

慕娘6193809
2021-08-15
老师, 你看我理解的对吗? 对于计算密集型的任务,由于任务之间很少切换,所以多进程能充分利用多核的优势,但是多线程由于gil锁的存在,
所以任何时候都只有一个线程在执行;对于io密集型,由于任务之间需要频繁切换,而进程切换的成本高于线程,所以这种情况下多线程的优势就大于多进程。
1回答
-
这样理解有问题, 不论是多线程还是多进程对于我们来说终极目标都是要解决cpu的利用率的问题, 计算密集型本身就是一直在占用cpu,就好比,我本来就一直在忙着,结果你一会儿让我干这个一会儿让我干那个,最后告诉我这样是为了提供我的利用率,你稍微想一下就知道:我尼玛一直不停的忙着效率还不高?还让我去切换干这个干那个效率高?切换不需要成本啊? 我原本focus在工作上的时间是996, 由于你让我切换我中间会浪费一天时间在切换上,我的工作时长就是995了。
基于这个前提你去理解多进程 - 你去多叫几个人啊? 这样大家工作时长就是 比如4个人就是 4*996了
那多线程是什么? 你有5份工作,这五份工作比如是炖4个汤, 这个时候炖汤容易啊,料准备好,然后下锅就等待了,如果你不采用多线程你把材料准备好下锅后就一直等啊,注意这个时候你是闲着的,为什么你会闲着啊,是因为炖汤需要等待时间啊,这个时候你闲着是关键,那另外三个才你是闲着的时候去准备材料呢?还是干等着这个汤炖好再去做下一道菜呢,明显啊你闲着的时候就去准备另一道菜啊,这个时候老板也知道一个人就能做四个菜他去请4个厨师干嘛啊。
所以核心就是:cpu是否在做一件事的时候会闲着,计算密集型就是cpu不会闲着, io密集型就是cpu会闲着
012021-08-19