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

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

 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资源的任务时,首选多进程模型处理。

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

原文发布于微信公众号 - Python与机器学习算法频道(alg-channel)

原文发表时间:2018-08-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏视频直播

世界杯直播技术揭秘及视频云直播回源系统的应用

近些年,视频直播应用蓬勃发展,带宽也是日渐新高,腾讯云旗下的视频云直播为斗鱼、快手、虎牙、龙珠、CNTV广大的企业客户提供了很大的支持,在行业内起到了引领的作用...

1853
来自专栏性能与架构

1号店架构演进读后感

前几天看了一篇介绍1号店架构演进的文章,其中给我印象最深的是他们的日志系统,非常完善,我之前所在的大公司,和现在创业中的小公司都没有做到,日志是一种重要思维方式...

38114
来自专栏Linyb极客之路

性能优化指南:性能优化的一般性原则与方法

  作为一个程序员,性能优化是常有的事情,不管是桌面应用还是web应用,不管是前端还是后端,不管是单点应用还是分布式系统。本文从以下几个方面来思考这个问题:性能...

952
来自专栏鹅厂网事

大型互联网公司海量监控系统设计

"鹅厂网事"由深圳市腾讯计算机系统有限公司技术工程事业群网络平台部运营,我们希望与业界各位志同道合的伙伴交流切磋最新的网络、服务器行业动态信息,同时分享腾讯在网...

5398
来自专栏挖掘大数据

入门必读:Hadoop新手学习指导

零基础学习hadoop,没有想象的那么困难,也没有想象的那么容易。从一开始什么都不懂,到能够搭建集群,开发。整个过程,只要有Linux基础,虚拟机化和java基...

2775
来自专栏一个会写诗的程序员的博客

基于NodeJS的全栈式开发(基于NodeJS的前后端分离)【转】

随着不同终端(Pad/Mobile/PC)的兴起,对开发人员的要求越来越高,纯浏览器端的响应式已经不能满足用户体验的高要求,我们往往需要针对不同的终端开发定制的...

1.4K2
来自专栏智能大石头

物联网智能硬件设备身份验证机制

设备身份验证有以下目标: 1,别人的设备不能接入我们的云平台 2,我们的设备,不能接入别人的云平台 3,考虑到设备要批量生产,云平台先生成设备编码再写入每个设备...

1210
来自专栏北京马哥教育

面向容器技术资源调度关键技术对比

摘要:本文以资源分配理念:拍卖、预算、抢占出发,引出Borg、Omega、Mesos、Kubernetes架构、数据、API的特点比较。然后梳理资源共享各种不同...

4237
来自专栏13blog.site

Java开源博客My-Blog之docker容器组件化修改

前言 5月13号上线了自己的个人博客,《Docker+SpringBoot+Mybatis+thymeleaf的Java博客系统开源啦》,紧接着也在github...

3747
来自专栏CSDN技术头条

时序列数据库武斗大会之什么是 TSDB ?

由于工作上的关系,笔者最近看了一些关于时序列数据库的东西,当然所看的也都是以开源方案为主。趁着这股热劲还没退,希望能整理一些资料出来。如果正好你也有这方面的需求...

8515

扫码关注云+社区

领取腾讯云代金券