新浪微博 登陆  注册   设为首页 加入收藏

学PHP >> UNIX/LINUX >> socket做服务端threading写多线程,是不是思路有问题

socket做服务端threading写多线程,是不是思路有问题

查看次数4709 发表时间2013-06-04 12:04:34

socket主要是io,设计到并行处理,所以肯定要用多线程。因为python的GIL,threading基本上比较鸡肋。而且多个连接的处理,是用select去轮询还是用更好的基于事件的ioloop也是要考虑的。在windows下,你的选...

socket主要是io,设计到并行处理,所以肯定要用多线程。


因为python的GIL,threading基本上比较鸡肋。而且多个连接的处理,是用select去轮询还是用更好的基于事件的ioloop也是要考虑的。

在windows下,你的选择大概只有select,但是在linux和unix下,epoll和kqueue是更好的选择,效率更高。


因为GIL的缘故,一旦进程阻塞就麻烦了。这要看后台复不复杂。如果处理起来时间很长,异步也是肯定要做的,尤其是流量大了的时候。

异步的话可以考虑twisted或tornado,标准库里面也有自带的asyncore,但一般都是用twisted。


flask支持wsgi标准,可以使uwsgi也可以使别的wsgi服务器。多线程和wsgi无关。

flask默认使用threading,就是接受到request后,启用一个新的线程来处理request。跟socket原理是差不多的。


但是引入了gevent补丁以后,threading就变成了协程。

gevent那个协程叫greenlet,比线程还要小的单元,创建的代价更小,而且调度上由程序员自己控制。效率会更高


gevent跟flask关系不大
flask依赖werkzeug,要看你只能先从werkzeug看起


http://ravenw.com 
这里面有三篇协程的,慎入,非计算机专业的可能看起来很吃力。


(转发请注明转自:学PHP)    


  相关推荐




  发表评论
昵称:
(不超过20个字符或10个汉字)
内容: