线程计算太慢如何解决,逻辑处理器2个怎样变4个

首页 > 实用技巧 > 作者:YD1662023-04-30 12:52:46

1 提升计算速度

遇上项目紧急情况,面对大量需要试算的数据时,如何快速提升计算效率,可能是最现实的问题。计算机操作系统提供了进程和线程模型,各种语言都有对这些模型的抽象,并且大多数系统都支持多进程和多线程任务处理。从这个角度,工程上是可以提升计算效率的。但是,什么样的任务适合多线程或多进程?如果适合,选用多线程,还是多进程?这些都是需要去决策的,如果选用不恰当,费了功夫,却没有太大提升。

当然,还有一些其他大数据处理方法,比如map-reduce框架下的spark就非常适合处理在线数据的,在此主要还是讨论如何选择多线程,多进程编程模型解决快速处理的任务。

这个话题,在前几天和小陈讨论过,且他还特意写了一篇相关推文,受此启发,我重新整理下,并结合一些项目经历。

2 调用第三方爬取数据接口

现如今,很多项目的最后上线实施可能都会或多或少地依赖第三方的接口服务,想着什么都靠自己完全不依赖与其他伙伴,真的是太难了! 再有,商场为了首先占领一块领域,时间的宝贵毋庸多言,如果什么都靠自己去实现去做,除非提前几年就能高瞻远瞩,否则一切都可能为时已晚,因此一旦发现了商机,就要尽快实施,利用一切资源,尽快实现做出产品或服务,先于他人一步迅速占领市场,才是取胜之道。

如果你的服务需要调用别人的接口,任务处理会有一定的延时阻塞,并且你的请求量至少是在千万级,面对这样的处理任务,用单进程或单线程都显得力不从心,处理会很缓慢,业务方没有耐心等你慢慢处理。

3 单机200个线程

调用别人的服务或接口,也是IO的一种,处理这种任务,一般适合用多线程。引用小陈的解释:

线程会时不时的因为IO请求被阻塞的情况下,使用多线程更好些。假设有四个线程(t1,t2,t3,t4)当t1先运行,运行一半需要处理一个IO请求,t1就由运行状态变为阻塞状态,t1的GIL锁被释放,此时此刻,假设(为什么是假设?因为当时t2,t3,t4都有可能获得GIL锁)t2获得GIL锁,t2由等待状态变为就绪状态,然后就开始运行,就这样不停的交替,形成了类似并发的情况,实际上这个就是一个伪并发,所以在IO密集型操作的程序(爬虫,文件读写,操作数据库……)中,适合用多线程模型。

同样,在处理2中提到的任务时,使用Python同一时刻确保最多200个线程调用爬取接口,快速实现数据处理任务。

4 计算密集型任务

大家或许已经知道多线程执行时,CPU的利用率并没有明显提高。上面已经提到,多线程实际上还是伪并行。

多进程可不可以充分利用闲置的CPU资源呢? 通过例子看一下:

线程计算太慢如何解决,逻辑处理器2个怎样变4个(1)

此时取任务管理器可以看到CPU的利用率迅速提升到100%:

线程计算太慢如何解决,逻辑处理器2个怎样变4个(2)

因此,在内存和寄存器中存在大量的需要抢占CPU资源的任务时,首选多进程模型处理。


私信回复下载更多学习资源:

all 查看所有已推送的原创文章

cs224 下载自然语言处理与深度学习斯坦福所有课程PPT

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.