扫码关注官方订阅号
认证高级PHP讲师
Twisted的IO操作是单线程的,即reactor线程。然而IO操作并不是消耗CPU性能的瓶颈所在,真正需要消耗CPU性能实际上是业务逻辑。Twisted提供了reactor.callInThread函数,可以让耗时的业务逻辑放到新的业务线程池中执行,而不是在reactor线程中运行,这样可以充分利用多核。
# -*- coding:utf-8 –*- import time from twisted.internet.protocol import Protocol from twisted.internet.protocol import Factory from twisted.internet import reactor # 耗时、阻塞的业务逻辑 def logic(data): print data time.sleep(3) # 假设这里有个变态的业务逻辑要执行3秒 class TcpServerHandle(Protocol): def dataReceived(self, data): reactor.callInThread(logic, data) # 在线程池中运行logic(data)耗时任务,不在reactor线程中运行 reactor.suggestThreadPoolSize(8) # 设置线程池的线程数量为8 factory = Factory() factory.protocol = TcpServerHandle reactor.listenTCP(8080, factory) reactor.run()
可以参考我写的一篇关于Twisted线程模型的博文:http://xxgblog.com/2014/10/16/mina-netty-twisted-10/
python(这里特指CPython)本身就不适用于CPU敏感型的开发,跑多核无力,twisted只是一个python的类库,低层也是select、epoll那些东西,如果你这里的用多核指的是spawn出多个process跑CPU那也算是一种多核,但这个不是广义上的支持多核。广义上支持多核的语言有erlang(天生面向并发), golang(调度器自己多调度), C++(需要设置线程的CPU亲和性), JVM语言如java/scala/clojue由JVM做调度。twisted的性能比libevent的要低
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
Twisted的IO操作是单线程的,即reactor线程。然而IO操作并不是消耗CPU性能的瓶颈所在,真正需要消耗CPU性能实际上是业务逻辑。Twisted提供了reactor.callInThread函数,可以让耗时的业务逻辑放到新的业务线程池中执行,而不是在reactor线程中运行,这样可以充分利用多核。
可以参考我写的一篇关于Twisted线程模型的博文:http://xxgblog.com/2014/10/16/mina-netty-twisted-10/
python(这里特指CPython)本身就不适用于CPU敏感型的开发,跑多核无力,twisted只是一个python的类库,低层也是select、epoll那些东西,如果你这里的用多核指的是spawn出多个process跑CPU那也算是一种多核,但这个不是广义上的支持多核。
广义上支持多核的语言有erlang(天生面向并发), golang(调度器自己多调度), C++(需要设置线程的CPU亲和性), JVM语言如java/scala/clojue由JVM做调度。
twisted的性能比libevent的要低