我们的服务器是基于Linux开发的,在Linux上,实现IO多路复用有几个主要的技术,分别是select模型,poll模型和epoll模型。
poll模型基本上和select在效率上是一样的,select的问题在poll模型中也没有被解决。
鉴于epoll的优点,我们的服务器采用了epoll作为IO多路复用的基本技术。
由于是单线程模型,当某个客户端的请求处理时间较长时,会影响服务器接收来自其他客户端的连接请求,进而影响整个服务器的并发性能。
因此,单线程的epoll模型在我们的分布式服务器中并不适用。下面是我们服务器的设计方案:
目前我们采用了Round-robin的方式,这样有可能产生负载不均衡的现象。 后面我们可以使用一定的策略,将main reactor接收到的连接请求分发到相对空闲的sub
对于每个sub reactor来说,这是单线程的。 我们同样可以将sub reactor进一步划分, 将数据的接收与请求的处理分离,请求的处理采用线程池的方式。这将进一步提高服务 器的并发能力。
特此感谢ChinaUnix论坛的@linux_c_py_php的一篇帖子给我带来的巨大帮助,友情链接:http://bbs.chinaunix.net/thread-4067753-1-1.html
联系客服