1
lianghui 2015-11-21 13:05:28 +08:00
使用 greenlet 加速 thrift 协议解析过程 cpu 计算也能加速 ,请 lz 证明下?
|
2
sujin190 OP @lianghui 我的原意只是说,在 tornado 读数据的过程中,如果不用 greenlet ,那么在协议解析过程中 readint 之类的就只能 callback 了,这比直接 return 要慢好几倍的
|
3
zenliver 2015-12-04 13:38:02 +08:00
greenlet 和 tornado 一起用,,,目测只会降低功能
|
6
zenliver 2015-12-04 14:42:36 +08:00
motor 似乎用的这个, 没研究过它的实现, 不过 tornado Iostream 对于 packet 的解析性能真的不敢恭维
|
7
sujin190 OP @zenliver greenlet 也是用来干这个的,但可以减少大量的回掉,测试用 tornado callback 解包的话比原生 thrift 满 4 倍到 5 倍,用 greenlet 切换上下文解包的话慢 1 倍不到,毕竟异步 io ,二进制解包没什么好的解决方案
|
8
sujin190 OP @zenliver 其实也是参照 motor ,最初实现了 https://github.com/snower/TorMySQL ,后来又对 thrift 改了一下, thrift 标准 python 库里有 tornado server ,但其在整个协议头又加了个包头,先发送整个数据长度,这样 tornado 收到解包会快一些,但没办法和其他语言互通,也是坑
|
9
jsongo 2016-08-31 23:58:34 +08:00
好久的贴。不能和其他语言互通的问题,今天也遇到了,不过找到了解决方法,共享下。 https://issues.apache.org/jira/browse/THRIFT-2335 这里有提到,用 TFramedTransport 就可以了。
|
10
sujin190 OP @jsongo 确实是,不过可能有时候很难指定用什么吧,不过经过很多次需改之后,现在的版本完全可以使用任意传输协议,性能也只比线程版本低百分之 30 左右,已经很快了
|