免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5394 | 回复: 3
打印 上一主题 下一主题

twisted reactor 线程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-26 16:21 |只看该作者 |倒序浏览
在研究一段时间的twisted后写了自己的一个server,运行性能还行,但是慢慢的深入下去后,有很多的不明白

twisted文档太少,很多东西都不知道怎么用,其中就有一个东西不明白:

reactor是一个线程在运行,当多个连接建立时候,这些连接是以多线程的方式在运行和管理还是只在reactor一个线程里运行和管理?

因为我觉得,如果一直只是在reactor一个线程里进行各种动作,对性能上是不是折扣比较大啊

另,这里的reactor我都是指twisted默认的reactor

哪位大哥能指点指点....

论坛徽章:
0
2 [报告]
发表于 2009-06-29 12:27 |只看该作者
性能上应该是慢一些吧
所以你的操作都不要太耗时,耗时的用defer,加到reactor里运行
twisted也支持线程的,不过说是为了兼容旧的代码才用的,新的最好不用
单线程写起来比较容易,不用考虑锁的问题
多线程不是还有context切换而带来的性能问题吗,c++都有boost.asio了,不过我还没有研究,应该和twisted对比一下看看

论坛徽章:
0
3 [报告]
发表于 2009-06-29 13:57 |只看该作者
twisted框架的核心就是异步处理,reactor就是在一个线程(主线程)中异步处理多个连接。
性能问题:
1、python本来性能就不是首要考虑的问题;
2、python有全局锁GIL,就算是python多线程执行,在解释器内都是排队执行的(非并行);
3、python有些扩展模块能利用多线程并行执行和多cpu。这个时候,可以使用twisted框架的线程池,threads.deferToThread提供了在线程中执行代码的功能;
使用twisted,首要熟悉它的defer原理

论坛徽章:
0
4 [报告]
发表于 2009-06-29 15:42 |只看该作者
还可以使用进程,这个对于你所调用的功能块是非python/twisted的时候比较好用。twisted和外部进程的联系是通过processprotocol来完成的,使用方法和其他协议类是一样的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP