首页 存档 技术 查看内容

浅谈服务器单I/O线程+工作者线程池模型架构及实现要点

2018-3-30 13:00 |来自: 互联网 352 0

摘要: (点击上方公号,可快速关注) 作者: 张峻崇 链接:http://www.cnblogs.com/ccdev/p/3542669.html 我们知道,服务器并发模型通常可分为单线程和多线程模型,这里的线程通常是指“I/O线程”,即负责I/O操作,协调 ...

(点击上方公号,可快速关注)


作者: 张峻崇

链接:http://www.cnblogs.com/ccdev/p/3542669.html

我们知道,服务器并发模型通常可分为单线程和多线程模型,这里的线程通常是指“I/O线程”,即负责I/O操作,协调分配任务的“管理线程”,而实际的请求和任务通常交由所谓“工作者线程”处理。通常多线程模型下,每个线程既是I/O线程又是工作者线程。所以这里讨论的是,单I/O线程 多工作者线程的模型,这也是最常用的一种服务器并发模型。我所在的项目中的server代码中,这种模型随处可见。它还有个名字,叫“半同步/半异步“模型,同时,这种模型也是生产者/消费者(尤其是多消费者)模型的一种表现。


这种架构主要是基于I/O多路复用的思想(主要是epoll,select/poll已过时),通过单线程I/O多路复用,可以达到高效并发,同时避免了多线程I/O来回切换的各种开销,思路清晰,易于管理,而基于线程池的多工作者线程,又可以充分发挥和利用多线程的优势,利用线程池,进一步提高资源复用性和避免产生过多线程。


1.模型架构


2. 实现要点


2.1 单I/O 线程epoll


实现单I/O线程的epoll模型是本架构的第一个技术要点,主要思想如下:


单线程创建epoll并等待,有I/O请求(socket)到达时,将其加入epoll并从线程池中取一个空闲工作者线程,将实际的任务交由工作者线程处理。


伪码:


创建一个epoll实例;

本文转载自:微信公众账号 - 伯乐在线,版权归原作者所有!

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部