欢迎来到天天文库
浏览记录
ID:36338329
大小:59.79 KB
页数:17页
时间:2019-05-09
《Python几种并发实现方案性能比较》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、转自:http://www.elias.cn/Python/PyConcurrency1.前言偶然看到Erlangvs.Stacklesspython:afirstbenchmark,对Erlang和StacklessPython的并发处理性能进行了实验比较,基本结论认为二者有比较相近的性能。我看完产生的问题是,StacklessPython与Python的其他并发实现机制性能又会有多大区别呢,比如线程和进程。因此我采用与这篇文章相同的办法来对StacklessPython、普通Python的thread模块
2、、普通Python的threading模块、普通Python的processing模块这四种并发实现方案进行了性能实验,并将实验过程和基本结果记录在这里。后来看到了基于greenlet实现的高性能网络框架Eventlet,因而更新了实验方案,将greenlet也加入了比较,虽然greenlet并非是一种真正意义上的并发处理,而是在单个线程下对程序块进行切换轮流执行。(EditSection↓)2.实验方案实验方案与Erlangvs.Stacklesspython:afirstbenchmark是相同的,用每种
3、方案分别给出如下问题的实现,记录完成整个处理过程的总时间来作为评判性能的依据:1.由n个节点组成一个环状网络,在上面传送共m个消息。2.将每个消息(共m个),逐个发送给1号节点。3.第1到n-1号节点在接收到消息后,都转发给下一号节点。4.第n号节点每次收到消息后,不再继续转发。5.当m个消息都从1号逐个到达第n号节点时,认为全部处理结束。(EditSection↓)2.1硬件平台MacbookPro3,1上的VmwareFusion1.0虚拟机中,注意这里给虚拟机只启用了cpu的单个核心:·原始Cpu:Co
4、re2Duo,2.4GHz,2核心,4MBL2缓存,总线速度800MHz·分配给虚拟机的内存:796M(单个CPU,还能比较并发吗?)(EditSection↓)2.2软件平台VmwareFusion1.0下的Debianetch:·原始Python:Debian发行版自带Python2.4.4·Python2.4.4Stackless3.1b3060516·processing-0.52-py2.4-linux-i686.egg·原始Python下的greenlet实现:pylib0.9.2(EditSec
5、tion↓)3.实验过程及结果各方案的实现代码见后文。实验时使用time指令记录每次运行的总时间,选用的都是不做任何输出的no_io实现(Python的print指令还是挺耗资源的,如果不注释掉十有八九得影响测试结果),每次执行时设定n=300,m=10000(Erlangvs.Stacklesspython:afirstbenchmark文章中认为n可以设置为300,m则可以取10000到90000之间的数值分别进行测试)。(EditSection↓)3.1StacklessPython的实验结果real0
6、m1.651suser0m1.628ssys0m0.020s即使将m扩大到30000,实验结果仍然很突出:real0m4.749suser0m4.716ssys0m0.028s(EditSection↓)3.2使用thread模块的实验结果real1m13.009suser0m2.476ssys0m59.028s(EditSection↓)3.3使用threading模块配合Queue模块的实验结果不太稳定,有时候这样:real1m9.222suser0m34.418ssys0m34.622s也有时这样:re
7、al2m14.016suser0m6.644ssys2m7.260s(EditSection↓)3.4使用processing模块配合Queue模块的实验结果real3m43.539suser0m15.345ssys3m27.953s(EditSection↓)3.5greenlet模块的实验结果real0m9.225suser0m0.644ssys0m8.581s(EditSection↓)3.6eventlet模块的实验结果注意!eventlet的这个实验结果是后来增补的,硬件平台没变,但是是直接在OSX
8、自带Python2.5环境下执行出来的,同时系统中还有Firefox等很多程序也在争夺系统资源。因此只能作为大致参考,不能与其他几组数据作直接对比。(其中eventlet的版本是0.9.5)real0m21.610suser0m20.713ssys0m0.215s(EditSection↓)4.结论与分析(EditSection↓)4.1StacklessPython毫无疑问,StacklessPy
此文档下载收益归作者所有