前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何做才能真正提升计算速度?

如何做才能真正提升计算速度?

作者头像
double
发布2018-09-30 10:58:46
7720
发布2018-09-30 10:58:46
举报
文章被收录于专栏:算法channel算法channel

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资源呢? 通过例子看一下:

代码语言:javascript
复制
 1# -*-coding: utf-8-*-
 2
 3
 4from multiprocessing import Process
 5
 6
 7def dead_while():
 8    a = 0
 9    while True:
10        a += 1
11
12
13if __name__ == "__main__":
14    ps = []
15    for i in range(4):
16        ps.append(Process(target=dead_while))
17    for t in ps:
18        t.start()

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

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

不走捷径,文章用心血凝聚,如不反感,可否点广告支持下, 这样我会更加坚定初心,更有勇气在这条"与别人不一样"的艰辛原创之路上一直走下去 …

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-08-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员郭震zhenguo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 提升计算速度
  • 2 调用第三方爬取数据接口
  • 3 单机200个线程
  • 4 计算密集型任务
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档