1
brucexin 2013-06-04 16:51:54 +08:00 1
工作地点是上海?
|
2
fangzhzh 2013-06-04 17:08:39 +08:00 1
不用心的失败招聘帖
|
3
dreampuf 2013-06-04 18:22:59 +08:00
Python 单进程 Qps 上 5k 的除了 gevent 还有什么其他的办法呢?
|
5
ipconfiger 2013-06-04 21:22:45 +08:00
python单进程5K并发,看这个量级的话坡主是接触过Python的web开发的。但是这个并发的概念是基于短连接的,基本上就是服务起起来,ab拿来一跑,就出来结果了。这个方式是web的对并发的概念,所以我想请问一下坡主的游戏是端游页游还是手游啊?拿ab跑并发多半是页游的做法,后期用flash的页游也很少用这种方式了。长链接的并发不是这么算地
|
6
muxi 2013-06-04 21:30:14 +08:00
@ipconfiger qps 和并发完全是不同的概念,你写这么多是想说明你知道ab么?
|
7
ipconfiger 2013-06-04 21:47:17 +08:00
@muxi QPS(TPS)在http的场景下基本就是作为并发量的标准了。你要显能干不用这么刻薄,我不跟你抢这个工作
|
9
dreampuf 2013-06-04 21:59:25 +08:00
不给出环境情况下的性能都是耍流氓,各位都把指标背后的环境贴出来吧。
|
10
muxi 2013-06-04 22:07:40 +08:00
@ipconfiger
1、qps 代表处理任务完成数量,而并发不是 2、即使在http短连接情况时,qps和并发数量相比不是一个量级 3、并发并不代表完成,而qps是每秒处理的任务,go随便可以跑80w以上的并发,没人敢出来说能跑80w qps 4、我并不是刻薄,只是觉得你跑偏了,还理直气壮 @dreampuf 我说过了5k qps 要看计算量,即使gevent 如果消耗不在io上的话,也很难出让自己的时间片,处理更多的请求 |
11
phuslu 2013-06-04 22:09:47 +08:00
顺便说一句 pypy 2.0 + gevent 现在已经比较可用了,性能提升大约在 100% 左右。
|
12
ipconfiger 2013-06-04 22:30:41 +08:00
@muxi
1.http短连接的并发量不等于QPS,但是,短连接的并发性能是和QPS有比例关系的,大多数标榜并发能力的框架都是通过QPS来作为自己并发能力的佐证 2.说白了我就是想问坡主是长链接还是短连接。理由下面说明 3.@dreampuf 沈仙人的 eurasia 号称长链接百万级并发的。但是实际上短连接的话,和gevent基本上在一个级别上的。实现上都差不多。 如果坡主所说的5000是指QPS的话,不算框架的开销,光是纯业务逻辑的话,每一个Q,都必须在0.2毫秒内执行完,对于Python来说不现实。而如果就但就并发的话,不管是eurasia还是gevnet都可以处理很高的并发连接,又远超5000这个量级,所以问清楚一点坡主。 @muxi 我觉得你就抓住QPS和并发说事没得意思,坡主没说清楚,我就想办法问清楚,仅此而已,因为坡主很可能是把QPS说成是并发了 |
13
arthur8845 2013-06-04 22:32:34 +08:00
@phuslu pypy1.9在io和大内存对象上问题比较大,2.0有改进吗
|
14
muxi 2013-06-04 22:39:27 +08:00
@ipconfiger 这次回答比较专业 :)
@phuslu gevent 最新的dev版本修正了不少的问题,pip install的版本其实还是旧的,建议如果使用的话还是github中直接clone比较靠谱,之前我用的时候就遇到不少坑 pypy 2.0 在内存回收上还不如cPyhon做得优秀,特别是大内存管理,当然也有可能是我没用好 |
15
dreampuf 2013-06-04 22:46:13 +08:00
@muxi 抱歉,我记错了。应该是50k/s 数据来源,Tornado 给出的答案似乎更优秀。 https://github.com/methane/echoserver/blob/master/README.rst
单纯并发只是一个方面,工程师的工作就是让这个方面做到最好,祝楼主早日招到人。 我是来吐槽JD的,“而不需要再修改代码” ,不需要修改代码这种营销词汇对 coder 完全没有吸引力好么,有谁的 Scale 能做到插网线就能扩容的?改配置,重建,这都不算事儿? |
16
yuelang85 2013-06-04 23:00:16 +08:00
|
17
yuelang85 2013-06-04 23:00:36 +08:00 1
没有人吐槽楼主网站吗?山寨+bug。。。。
|
18
fd1207 OP N人不少:)
|
22
fd1207 OP @ipconfiger @muxi 请教各位达人, 手游+长连接 后台用python,并发能做到多少呢?1)斗地主类游戏 tcp? 2)RPG类 3)社交类 http?
|
23
xwssole 2013-06-08 17:34:00 +08:00 1
@dreampuf 方便比较多吧,可以裸写select/epoll,也可以用asyncore等库,不过这些都没有什么封装。
高端的可以用Twisted,集成了很多协议,但是是基于异步回调的处理机制,对于编码或者是测试都不算是一个好的体验! Gevent在前2年的PyCon上炒得比较火,通过Greenlet可以将异步的网络访问转化为同步的函数调用,因此很多第三方的库可以直接使用。 |
26
ipconfiger 2013-06-08 18:06:07 +08:00 1
@fd1207 取决于你的TPS,单个Python进程,无论用多牛逼的异步库,每一次请求执行的事务开销制约了每秒的吞吐能力,超过这个阈值,能够hold住再多的连接也会卡。打个比方,如果你实际的逻辑操作用1ms能执行完,我们完全忽视框架的开销,一个Python进程撑死也就能对1000个连接完成响应,再多的就会延迟了。当然实际的时候访问量并不平均,有时候请求多点,有时候请求少点,比如你们的斗地主类型的话,对延迟不是很敏感,也许可以比1000稍高一点。具体多少就看对延迟的容忍度了。一般的做法是开N个进程,N=cpu 核数,后面用redis同步消息
|
27
fd1207 OP @ipconfiger 谢谢!
|