1
phuslu 2012-10-18 15:51:20 +08:00
gevent.sleep(0) 似乎不是必须的.
http://gist.github.com/3910331 |
2
phuslu 2012-10-18 15:53:50 +08:00
还有, python 2.6 比较老, 可能测试 python 2.7 更有说服力.
|
3
lookhi 2012-10-18 15:59:04 +08:00
再加个tornado的吧
|
4
phuslu 2012-10-18 16:03:49 +08:00
@lookhi tornado 其实不必加上啦, 这种 benchmark 它不占优势. nodejs 最新版本倒是值得一试, 估计性能会非常好.
|
5
phuslu 2012-10-18 16:16:31 +08:00
看了一下 twisted 代码, 使用的 buffer size 是 65536, 大概是这点比较占便宜.
建议楼主把 golang/gevent 的 buffer size 也改成 65536 试下. |
8
myrual OP @phuslu 把go lang里面的接受buffer改到65535就获得了 23M的稳定峰值流量, 400个转发socket.
|
9
phuslu 2012-10-18 18:10:19 +08:00
@myrual 理论上说 python27+gevent 不会比 python27+twisted 更慢. nodejs 0.8.x 在这类 benchmark 中应该最占便宜.
|
10
myrual OP python gevent 把recv的数量改大没有变化。
|
12
myrual OP 明天到公司试试。顺便尝试一下python27 + gevent 的效果
|
14
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 在不断发展中, 很期待~ |