您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
菜鸡求问,c++里的epoll和java里的线程池到底怎么理解,优劣如何?
线程,模型,多线程菜鸡求问,c++里的epoll和java里的线程池到底怎么理解,优劣如何?
发布时间:2016-12-08加入收藏来源:互联网点击:
菜鸡求问,c++里的epoll和java里的线程池到底怎么理解,优劣如何?
回答于 2019-09-11 08:43:50
回答于 2019-09-11 08:43:50
服务器并发模型通常可分为单线程和多线程模型,这里的线程通常是指“I/O线程”,即负责I/O操作,协调分配任务的“管理线程”,而实际的请求和任务通常交由所谓“工作者线程”处理。通常多线程模型下,每个线程既是I/O线程又是工作者线程。所以这里讨论的是,单I/O线程+多工作者线程的模型,这也是最常用的一种服务器并发模型。我所在的项目中的server代码中,这种模型随处可见。它还有个名字,叫“半同步/半异步“模型,同时,这种模型也是生产者/消费者(尤其是多消费者)模型的一种表现。
这种架构主要是基于I/O多路复用的思想(主要是epoll,select/poll已过时),通过单线程I/O多路复用,可以达到高效并发,同时避免了多线程I/O来回切换的各种开销,思路清晰,易于管理,而基于线程池的多工作者线程,又可以充分发挥和利用多线程的优势,利用线程池,进一步提高资源复用性和避免产生过多线程。
epoll是linux下高并发服务器的完美方案,因为是基于事件触发的,所以比select快的不只是一个数量级。
单线程epoll,触发量可达到15000,但是加上业务后,因为大多数业务都与数据库打交道,所以就会存在阻塞的情况,这个时候就必须用多线程来提速。
上一篇:工作忙时什么感受呢?
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |