1
scys 2016-01-14 17:51:46 +08:00
测试 tornado ,不要在 windows 下,完全没有优化,只是个模型
|
2
bobuick 2016-01-14 17:51:57 +08:00
什么压力工具, 什么参数,在本机么,要发全一点
|
3
aisk 2016-01-14 17:53:23 +08:00
Windows 下好像只支持 select ,肯定不会快了。
|
4
phithon 2016-01-14 17:54:05 +08:00
楼上说的对, windows 下只是 select ,最慢的异步模型。
|
5
bluesky139 OP @scys
@aisk @phithon @bobuick 刚在 mac 下试了下,也一样。压力工具是 JMeter. 并发数是我自己统计的,代码如下: access = 0 def PrintDown(): global access print 'access', access access = 0 Timer(1, PrintDown, ()).start() Timer(1, PrintDown, ()).start() class MainHandler(tornado.web.RequestHandler): def post(self): global access access = access + 1 self.write('') 结果如下: access 161 access 142 access 169 access 139 access 168 access 136 |
6
scys 2016-01-14 18:31:32 +08:00
为啥不跑在 linux/bsd 下?
|
7
lecher 2016-01-14 19:21:33 +08:00 via Android
这份代码是阻塞的。请自行加上异步处理的装饰器。
|
8
phithon 2016-01-14 19:29:42 +08:00
楼上正解。楼主你在异步框架里写阻塞的内容,当然慢了~
|
9
wy315700 2016-01-14 20:01:11 +08:00
并发和 QPS 不是一个概念
|
10
sujin190 2016-01-14 22:47:30 +08:00
cpu 跑满了么?这简单的,四核四进程的话 qps 可以到两万不成问题,单进程七八千 qps 也无压力
|
11
neoblackcap 2016-01-15 01:18:11 +08:00
@bluesky139 OS X 下的 IO 复用也是烂,OS X 下面的可不是 kqueue ,肯定也是不行的。像 Tornado 这样的异步框架,都是基于 epoll/kqueue 的,没有这些系统调用,快不起来。
还有就是不能用标准库里面的 time 这些库,这些库调用的时候都会堵塞 IOloop ,肯定快不了。 |
12
mengskysama 2016-01-15 01:41:46 +08:00 via Android
yield gen.sleep(0.5)
|
13
dai269619118 2016-01-15 09:18:49 +08:00
tornado 是单进程的
可以多开几个 用 nginx 做反向代理 |
14
sujin190 2016-01-15 09:43:41 +08:00
@neoblackcap OS X 用的就是 kqueue ,有什么不同么?
|
15
bluesky139 OP @scys
@neoblackcap 我现在移到了 linux 下( CPU i5-4278U ,这个尾巴带 U 的 CPU 会不会太垃圾了?),结果: access 1278 access 1335 access 1229 @lecher @phithon 这两位是指 Timer 里面会锁 access 么? 我现在改成了这样: class MainHandler(tornado.web.RequestHandler): executor = ThreadPoolExecutor(20000) @tornado.web.asynchronous @tornado.gen.coroutine def get(self): ret = yield self.get_async('') self.write('end.' + str(ret)) self.finish() @run_on_executor def get_async(self, p): global access access = access + 1 return 5 结果: access 339 access 263 access 310 话说这个怎么弄比较好? @dai269619118 暂时先不考虑多实例的问题,先把单个提起来再说。 |
16
alex8224 2016-01-15 10:54:13 +08:00
@bluesky139 上支持 windows IOCP 的 IOLoop
|
17
chuangbo 2016-01-15 14:24:02 +08:00
异步框架是要 IO 压力高的时候优势才大。
|
18
neoblackcap 2016-01-15 17:03:44 +08:00
@sujin190 根据网上的反应来看, OS X 的 kqueue 应该是跟 FreeBSD 的不太一样,记得当初看到的说法是 OS X 网络性能烂,但到底是不是因为 IO 复用部分的系统调用烂呢,这个我就不清楚了。
不过根据大家针对高级 IO 接口的比较来看, OS X 就没被比较过,看过的评测都是 BSD/kqueue, Linux/epoll, Windows/IOCP 。因此根据我的推断,应该是 OS X 的 kqueue 实现是残废的或者是它其他网络部分实现是残废的。 此处引用自 Tornado 的官方文档 http://www.tornadoweb.org/en/stable/index.html Platforms: Tornado should run on any Unix-like platform, although for the best performance and scalability only Linux (with epoll) and BSD (with kqueue) are recommended for production deployment (even though Mac OS X is derived from BSD and supports kqueue, its networking performance is generally poor so it is recommended only for development use). Tornado will also run on Windows, although this configuration is not officially supported and is recommended only for development use. |
19
neoblackcap 2016-01-15 17:06:30 +08:00
@bluesky139 要测试的话,请去看官方的测试例子,记得 Tornado 就提供一个类似 Time 的非堵塞库。专门给大家测试用的。多读文档,你会发现很多问题文档里面就有写了
|