84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
tornado 不是已经异步了吗, 为什么加上 gevent 后会更快?
提问来自于这篇 blog, 速度测试
走同样的路,发现不同的人生
猜测是因为gevent是c的模块,而tornado封包重组,HTTP协议解析都是python写的,比如解析HTTP头用的是正则。。。 tornado-over-gevent 中 tornado 运行于 wsgi 模式,HTTP协议解析等工作就由 gevent 完成了。
题主的疑问中,异步不一定就比同步的更快吧,这需要看具体应用场景。
相比较而言,如果不是并发,并且不是针对有阻塞的操作。同步和异步谁更快还不好说。
python 的并发技术中,大致是多线程,多进程,协程。可以参考下这篇文章
tornado 可以异步也可以同步,具体还得看如何使用。
原文说:
从上面结果可能看出Tornado比Flask快很多. 而Gevent可以让Tornado更快一些, 但快不了很多.
我在别的文章里看到过这样的测试结论。既然快不了多少,不如不用。
tornaod提供了一个魔术的stackcontext manager来提供对协程的上下文管理,而这个是tornado实现的。而gevent把相同的工作用C完成了。但是两者的效率相差并没有多少。 另外一点值得一提的时候, tornado实际上提供了一个@coroutine的机制,这个让同步的写法也消耗了效率。
听我老大说的, gevent 使用的是 greenlet + epoll, greenlet 自定义了栈, greenlet 有点类似 goroutine, 可以实现并行. tornado只是自已实现了 epoll.
猜测是因为gevent是c的模块,而tornado封包重组,HTTP协议解析都是python写的,比如解析HTTP头用的是正则。。。
tornado-over-gevent 中 tornado 运行于 wsgi 模式,HTTP协议解析等工作就由 gevent 完成了。
题主的疑问中,异步不一定就比同步的更快吧,这需要看具体应用场景。
相比较而言,如果不是并发,并且不是针对有阻塞的操作。同步和异步谁更快还不好说。
python 的并发技术中,大致是多线程,多进程,协程。可以参考下这篇文章
tornado 可以异步也可以同步,具体还得看如何使用。
原文说:
我在别的文章里看到过这样的测试结论。既然快不了多少,不如不用。
tornaod提供了一个魔术的stackcontext manager来提供对协程的上下文管理,而这个是tornado实现的。而gevent把相同的工作用C完成了。但是两者的效率相差并没有多少。
另外一点值得一提的时候, tornado实际上提供了一个@coroutine的机制,这个让同步的写法也消耗了效率。
听我老大说的, gevent 使用的是 greenlet + epoll, greenlet 自定义了栈, greenlet 有点类似 goroutine,
可以实现并行. tornado只是自已实现了 epoll.