Python
cyningsun
这个作者很懒,什么都没留下…
展开
-
Twisted服务器开发技巧(1)
Twisted是一个非常具有想像力的框架。我已经被它的代码所折服,我想在我下面再使用python开发网络应用时,可能只会选用Twisted了。但是,一个真正达到性能优化服务器,还是需要我们在程序中真正良好的去应用Twisted的各种工具的。 最常见的情况就是我们将一个非阻塞的应用中,加入了长时间的处理过程,从而达到了阻塞的效果,从而让大家都因为一位同志的长时工作而等待。 先来看看下面转载 2012-07-26 20:06:34 · 1379 阅读 · 0 评论 -
Twisted服务器开发技巧(2)
问题详见:Twisted服务器优化专题 第二种优化的方法,可以只用下图来解释。即,使用轻量级的线程池(PreProcess)对所有请求进行预处理,所有不需要I/O执行时间很短的请求直接执行,如果是需要磁盘I/O的则放入下一级阻塞队列,有单独的线程池来处理这些请求。详见下图: 第一级请求使用自己已有的线程池,不再多说。I/O请求+二级线程池可以使用twisted提供的ThreadPo原创 2012-08-24 00:32:11 · 1753 阅读 · 0 评论 -
Twisted服务器开发技巧(3)
问题详见:Twisted服务器优化专题 第三种方法是使用经典的服务器模型的select(epoll)异步I/O。使用twisted框架中的reactor(epoll/select)+reader,将磁盘I/O封装为reader,交给reactor来管理,磁盘I/O完成后调用回调函数将数据返回发送改请求的客户端。这样既不会因为I/O阻塞请求处理线程也不会如方法二一样因为I/O阻塞读取线程,详见下图原创 2012-08-27 00:07:31 · 1705 阅读 · 0 评论 -
Twisted服务器优化专题
上图描述的是一般的服务器的模型,即:由主线程作为server端,负责接收所有到来的请求,并将请求封装为新的对象放入阻塞队列中。由线程池中的一系列工作线程对请求的业务进行处理(可能包括磁盘读写的操作),最后返回处理结果。Memcached服务端也是采用类似的架构。 看起来上面的架构相当合理,但是仔细看来,其实里面大有可优化之处。下面是阻塞队列: 线程池中的线程数目毕竟有限,假设只有四条线原创 2012-08-22 22:32:14 · 1988 阅读 · 0 评论