
1 phuslu Oct 18, 2012 gevent.sleep(0) 似乎不是必须的. http://gist.github.com/3910331 |
2 phuslu Oct 18, 2012 还有, python 2.6 比较老, 可能测试 python 2.7 更有说服力. |
3 lookhi Oct 18, 2012 再加个tornado的吧 |
5 phuslu Oct 18, 2012 看了一下 twisted 代码, 使用的 buffer size 是 65536, 大概是这点比较占便宜. 建议楼主把 golang/gevent 的 buffer size 也改成 65536 试下. |
9 phuslu Oct 18, 2012 @myrual 理论上说 python27+gevent 不会比 python27+twisted 更慢. nodejs 0.8.x 在这类 benchmark 中应该最占便宜. |
10 myrual OP python gevent 把recv的数量改大没有变化。 |
12 myrual OP 明天到公司试试。顺便尝试一下python27 + gevent 的效果 |
14 phuslu Oct 19, 2012 @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 在不断发展中, 很期待~ |