python爬虫日记本Python数据采集与爬虫scrape

Python高阶(一) - 单线程、多线程和多进程的效率对比测试

2017-07-04  本文已影响308人  Spareribs

多线程的目的 - “最大限度地利用CPU资源”。每个程序执行时都会产生一个进程,而每一个进程至少要有一个主线程。对于单CPU来说(没有开启超线程),在同一时间只能执行一个线程,所以如果想实现多任务,那么就只能每个进程或线程获得一个时间片,在某个时间片内,只能一个线程执行,然后按照某种策略换其他线程执行。由于时间片很短,这样给用户的感觉是同时有好多线程在执行。
Python是运行在解释器中的语言,查找资料知道,python中有一个全局锁(GIL),在使用多线程(Thread)的情况下,不能发挥多核的优势。而使用多进程(Multiprocess),则可以发挥多核的优势真正地提高效率。

代码下载

单线程、多线程和多进程的效率对比测试:github地址

对比实验

资料显示,如果多线程的进程是CPU密集型的,那多线程并不能有多少效率上的提升,相反还可能会因为线程的频繁切换,导致效率下降,推荐使用多进程;如果是IO密集型,多线程进程可以利用IO阻塞等待时的空闲时间执行其他线程,提升效率。所以我们根据实验对比不同场景的效率

信息 详情
操作系统 Windows 7 专业版 64-bit SP1
CPU Intel Core i5 4590 @ 3.30GHz 4内核4线程
内存 8.00GB 单通道 DDR3 @ 798兆赫兹
硬盘 931GB Seagate ST1000DM003-1ER162 ATA Device (SATA)

过程展示(以CPU密集型操作为例)

实验结果

| CPU密集型操作| IO密集型操作| 网络请求密集型操作
-- | -- | --| --
线性操作| 69.73533328374 |17.76633326213 | 6.78833333651
多线程操作| 75.40299995740 |145.68366670609 | 1.93999997775
多进程操作| 13.97433336576 | 4.67833328247| 2.38333328565

总结

疑问

参考文章

仅个人观点,,欢迎留言~~~

上一篇下一篇

猜你喜欢

热点阅读