tcpforward server benchmark go python pypy twisted gevent

2012-10-18 15:10:21 +08:00
 myrual
我作的一个试验。
主机 amazon ec2, small, ubuntu 10.04 32bit

pypy2.7 + twisted 最大连接 320 峰值流量 20M
python2.6 + twisted 最大连接 250 峰值流量 16M
golang1.0.2 最大连接 200 峰值流量 13M
python2.6 + gevent 最大连接 150 峰值流量 10M

感受:
pypy确实很强大。
golang很好用。
gevent不是简单的线程替代品,不sleep或者其他io block是不会交出控制权的。

代码库如下
https://github.com/myrual/tcpforward_benchmark
5512 次点击
所在节点    Python
16 条回复
phuslu
2012-10-18 15:51:20 +08:00
gevent.sleep(0) 似乎不是必须的.
http://gist.github.com/3910331
phuslu
2012-10-18 15:53:50 +08:00
还有, python 2.6 比较老, 可能测试 python 2.7 更有说服力.
lookhi
2012-10-18 15:59:04 +08:00
再加个tornado的吧
phuslu
2012-10-18 16:03:49 +08:00
@lookhi tornado 其实不必加上啦, 这种 benchmark 它不占优势. nodejs 最新版本倒是值得一试, 估计性能会非常好.
phuslu
2012-10-18 16:16:31 +08:00
看了一下 twisted 代码, 使用的 buffer size 是 65536, 大概是这点比较占便宜.
建议楼主把 golang/gevent 的 buffer size 也改成 65536 试下.
myrual
2012-10-18 16:35:44 +08:00
@phuslu 用了你的代码,最大连接260, 最大流量13M
phuslu
2012-10-18 17:23:56 +08:00
@myrual buffer size 调成 65536 呢?
myrual
2012-10-18 17:55:38 +08:00
@phuslu 把go lang里面的接受buffer改到65535就获得了 23M的稳定峰值流量, 400个转发socket.
phuslu
2012-10-18 18:10:19 +08:00
@myrual 理论上说 python27+gevent 不会比 python27+twisted 更慢. nodejs 0.8.x 在这类 benchmark 中应该最占便宜.
myrual
2012-10-18 18:13:07 +08:00
python gevent 把recv的数量改大没有变化。
phuslu
2012-10-18 18:19:51 +08:00
@myrual 呃, 我又把 gist 的代码改了改, 之前 write 没用 buffer, 现在用上了, 可能会好些.
myrual
2012-10-18 20:57:54 +08:00
明天到公司试试。顺便尝试一下python27 + gevent 的效果
myrual
2012-10-19 09:22:37 +08:00
@phuslu 峰值稳定在20M,400左右的连接。
phuslu
2012-10-19 09:48:53 +08:00
@myrual 嗯, 谢谢. 这个结果差不多是 python 的极限了.
之前也看过一些 web 或 tcp 方面 benchmark, gevent 基本是 python 目前唯一拿得出手的比较完备的框架. (单测 web 框架的话, bjoern/meinheld 都会比 gevent 快很多, 可惜不够完备)
tornado 的话, 基本比 gevent 慢 30% 以上, 吃亏在它的 IOStream 的 buffer 是用 collection.deque 实现, 尽管已经高度优化, 但是还是比不上 gevent 集成的 libev/libevent.
纯 IO 的测试(不涉及后端), gevent 勉强可以达到 golang/nodejs 同一个数量级, 但是如果加上一些简单的计算, 差不多慢2~3倍. 如果计算量比较大或者设计后端操作, 那就更慢了.
nodejs/golang 目前做这类 benchmark 性能最好, 而且 golang 在不断发展中, 很期待~
lookhi
2012-10-27 07:42:00 +08:00
@myrual 激发这个benchmark的程序在哪里啊?
myrual
2012-10-27 12:51:09 +08:00
@lookhi 你说的是客户端么?刚刚简单改了一下,把自己业务相关的名字修改了一下,没验证就push到 github了。依赖gevent库。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/50312

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX