当前位置:主页 > 科技论文 > 计算机论文 >

基于Reactor与非阻塞IO的服务端框架设计与实现

发布时间:2021-11-01 09:37
  吞吐量对服务端框架的处理效率有着重要的影响,为了进一步提升传统服务端框架的吞吐量,提出了一种基于Reactor模式与非阻塞IO的服务端框架。首先,对Reactor模式与非阻塞IO进行了优势分析,并阐述了Reactor线程池的分发逻辑;其次,通过设计自适应缓冲区结构降低了内存分配次数,提升了数据读入和写出的效率;最后,通过设计双缓冲结构优化了日志的写入操作,提升了日志写入效率。实验结果显示:在单线程测试环境下,对比libevent,该服务端框架吞吐量平均提升了9%;在多线程测试环境下,分别在100连接与1000连接时,对比Boost.Asio,该服务端框架吞吐量分别平均提升了28.66%与20.76%。这表明该服务端框架吞吐量较高,可应用于较大数据量请求的场景。 

【文章来源】:浙江理工大学学报(自然科学版). 2020,43(04)

【文章页数】:7 页

【部分图文】:

基于Reactor与非阻塞IO的服务端框架设计与实现


Reactor模式流程示意图

时序图,时序图,框架,线程池


本文服务端总体框架主要分为四个模块:Reactor线程池、自适应缓冲区、双缓冲日志以及任务线程池。多个请求状态下的时序图如图2所示。其中Epoll为多路复用机制的一种;Connection为发出请求的连接;Accept、Read和Write为网络编程系统函数;Encode、Decode和Compute为服务端开发过程中常见的编码、解码以及计算流程;Wait表示线程池空闲时长。当连接connection1成为活动连接时,主反应堆Base Reactor监听到该事件后,将Accept函数返回的文件描述通过Round robin的方式分发给反应堆进行当读、写、编解码等操作,其中数据的收发都先经过自适应缓冲区的处理,待数据接收完整时再递交应用层做进一步处理。应用层处理过程中,如果其中某个操作较为耗时,为了不阻塞IO线程,则将耗时操作递交给线程池做进一步处理,以尽快空出IO线程,使线程得到最大程度的复用,从而提升服务端框架整体的吞吐量。同时子反应堆的数量以及线程池中线程的数量在服务端程序启动时就已经确定,当遇到突发请求时处理能力不会随着请求数量的急剧增多而陡然降低,也不会因为IO线程由于长时间被耗时操作所占据从而影吞吐量甚至失去响应[14]。2.1 核心接口设计

类图,类图,核心,框架


框架核心接口的类图如图3所示,主要有ReacotrLoop、ReactorAcceptor、ReactorChannel、TcpConnection和ThreadPool等。a)ReacotrLoop类。该类适用于多路复用机制,主要功能有:向epoll中注册服务端程序所关心的事件,如连接建立事件、可读可写事件等;通过多路复用机制,在内核对这些事件进行监听,当所监听的事件变为活动时,将该事件与子反应堆进行绑定,即派发给相应的ReactorChannel进行处理。


本文编号:3469938

资料下载
论文发表

本文链接:https://www.wllwen.com/kejilunwen/jisuanjikexuelunwen/3469938.html


Copyright(c)文论论文网All Rights Reserved | 网站地图 |

版权申明:资料由用户26e5b***提供,本站仅收录摘要或目录,作者需要删除请E-mail邮箱bigeng88@qq.com