对于多进程和多线程的理解总结,请老师看一下是否正确

来源:11-9 多线程和多进程对比

慕娘6193809

2021-08-15

老师, 你看我理解的对吗? 对于计算密集型的任务,由于任务之间很少切换,所以多进程能充分利用多核的优势,但是多线程由于gil锁的存在,
所以任何时候都只有一个线程在执行;对于io密集型,由于任务之间需要频繁切换,而进程切换的成本高于线程,所以这种情况下多线程的优势就大于多进程。

写回答

1回答

bobby

2021-08-18

    这样理解有问题, 不论是多线程还是多进程对于我们来说终极目标都是要解决cpu的利用率的问题, 计算密集型本身就是一直在占用cpu,就好比,我本来就一直在忙着,结果你一会儿让我干这个一会儿让我干那个,最后告诉我这样是为了提供我的利用率,你稍微想一下就知道:我尼玛一直不停的忙着效率还不高?还让我去切换干这个干那个效率高?切换不需要成本啊? 我原本focus在工作上的时间是996, 由于你让我切换我中间会浪费一天时间在切换上,我的工作时长就是995了。

    基于这个前提你去理解多进程 - 你去多叫几个人啊? 这样大家工作时长就是 比如4个人就是 4*996了

    那多线程是什么? 你有5份工作,这五份工作比如是炖4个汤, 这个时候炖汤容易啊,料准备好,然后下锅就等待了,如果你不采用多线程你把材料准备好下锅后就一直等啊,注意这个时候你是闲着的,为什么你会闲着啊,是因为炖汤需要等待时间啊,这个时候你闲着是关键,那另外三个才你是闲着的时候去准备材料呢?还是干等着这个汤炖好再去做下一道菜呢,明显啊你闲着的时候就去准备另一道菜啊,这个时候老板也知道一个人就能做四个菜他去请4个厨师干嘛啊。

    所以核心就是:cpu是否在做一件事的时候会闲着,计算密集型就是cpu不会闲着, io密集型就是cpu会闲着

0
1
慕娘6193809
嗯嗯,明白了,谢谢老师
2021-08-19
共1条回复

Python3高级核心技术97讲,高级进阶的必学课程

socket编程/多线程/多进程/线程池/asyncio并发编程/协程和异步IO

2121 学习 · 551 问题

查看课程