作者:小K
来源:麦叔编程
❝
Python三分钟第132篇让大家从协程爬虫和计算密集型和IO密集型两个主题中选取一个来讲解,很多小伙伴表示太难了。
小孩子才做选择,不能全要吗?
❞
感谢大家的支持,今天的Python三分钟给大家介绍下计算密集型和IO密集型。
这个知识比较偏硬件,如果掌握这两个知识点,相信大家在异步、并发、并行编程会有更大的进步。
❝
今天的文章也不会出现任何代码,也适合不会Python的同学食用。
❞
CPU密集型也叫计算密集型,这部分工作基本上都是都是CPU完成的。
例如用电脑计算1亿个数的平均数。
CPU密集表示某任务有着大量的运算且没有阻塞(休息时间),CPU始终全速运行。
最直观的体现形式是任务开启后,CPU温度将急剧上升,散热风扇运转速度也会变快。
与CPU密集型不同,IO密集型工作基本是由磁盘等储存设备完成的。
IO是输入、输出的缩写(Input、Output)。
像我们用U盘往电脑拷贝大型文件,那是最经典的IO密集型任务。
这个问题不太好回答,要从实际情况进行分析,如果爬虫需要突破对方服务器的安全措施(反爬),可能也会涉及大量的解密计算。
这样的爬虫应该要被分到CPU密集型任务里去的。
如果就像上篇文章中的协程爬虫那样,只是负责发送请求和接收请求,CPU参与度不高。
这样的爬虫应该要被分到IO密集型任务里去的。
但是协程爬虫存在大量的计算任务,那。。。。。没啥必要用协程了。
❝
如果Baidu的服务器响应速度能再快一点,我相信我们的协程爬虫速度也会更快一点。
❞
说到计算密集型就不得不提Python的GIL(全局解释器锁)。
因为GIL的存在,CPython解释器只能运行在一个进程之中,CPython没有真正的多进程,所以硬件上CPU核心再怎么多也没什么用,CPython只能用到一个核。
计算密集型是CPython的软肋。
但是CPython在处理IO密集型任务还是非常棒的,尤其引入了协程之后。
如果你对GIL的概念一知半解,请留言GIL,我将会专门开一期对其讲解。
数据分析咨询请扫描二维码