前言 1.
偶然看到Erlang vs. Stackless python: a first benchmark,对Erlang和Stackless Python的并发处理性能进行了实验比较,基本结论认为二者有比较相近的性能。我看完产生的问题是,Stackless Python与Python的其他并发实现机制性能又会有多大区别呢,比如线程和进程。因此我采用与这篇文章相同的办法来对Stackless Python、普通Python的thread模块、普通Python的threading模块、普通Python的processing模块这四种并发实现方案进行了性能实验,并将实验过程和基本结果记录在这里。
后来看到了基于greenlet实现的高性能网络框架Eventlet,因而更新了实验方案,将greenlet也加入了比较,虽然greenlet并非是一种真正意义上的并发处理,而是在单个线程下对程序块进行切换轮流执行。
(Edit Section ↓)
实验方案 2.
实验方案与Erlang vs. Stackless python: a first benchmark是相同的,用每种方案分别给出如下问题的实现,记录完成整个处理过程的总时间来作为评判性能的依据:
1.由n个节点组成一个环状网络,在上面传送共m个消息。
2.将每个消息(共m个),逐个发送给1号节点。
3.第1到n-1号节点在接收到消息后,都转发给下一号节点。
4.第n号节点每次收到消息后,不再继续转发。
5.当m个消息都从1号逐个到达第n号节点时,认为全部处理结束。
(Edit Section ↓)
硬件平台2.1
Macbook Pro 3,1上的Vmware Fusion 1.0虚拟机中,注意这里给虚拟机只启用了cpu的单个核心:
?原始Cpu:Core 2 Duo,2.4 GHz,2核心,4 MB L2 缓存,总线速度800 MHz ?分配给虚拟机的内存:796M
(单个CPU,还能比较并发吗?)
(Edit Section ↓)
软件平台2.2