文章 12
评论 4
浏览 20907
C++高性能服务端编程——muduo网络库源码阅读(二)事件响应与任务管理

C++高性能服务端编程——muduo网络库源码阅读(二)事件响应与任务管理

概述 上一篇文章简要介绍了reactor事件驱动模型和muduo网络库的总体架构,并且简述了事件循环核心类EventLoop的整体执行逻辑。容易看出,loop函数中 poller_对象的 poll方法和Channel的 handleEvent方法是我们需要重点关注的对象,它们分别对应对事件响应和处理的代码实现。除此以外,EventLoop中任务队列的管理和线程安全的细节也是我们需要关注的。本文将结合相关的源码,对muduo的事件响应、处理以及任务管理机制做一个分析。 muduo的IO多路复用机制 muduo实现了Linux中poll和epoll两种IO多路复用机制,同时用了一些额外的数据结构对其进行封装,以配合muduo的整体逻辑实现。在muduo中,Poller和Channel两个类是实现该机制的关键。 Channel 前面已经提过,muduo中Channel类相当于上一篇文章reactor模型中的handler,每个文件描述符都对应一个Channel,由它负责注册对应事件的回调函数。需要注意的是,Channel并不拥有这个文件描述符,只是拥有文件描述符的事件信息和回调逻辑。换句话说....

C++高性能服务端编程——muduo网络库源码阅读(一)基础结构与事件驱动循环

C++高性能服务端编程——muduo网络库源码阅读(一)基础结构与事件驱动循环

简介 muduo是陈硕编写的一个基于非阻塞IO和事件驱动设计的C++网络编程库,基于Reactor模式设计,原生支持多核多线程模式,其网络部分并不具备十分复杂的功能,并且仅支持Linux系统。作为一个功能相对简单且性能不俗的网络编程库,muduo非常适合作为C++网络编程新手的入门练习项目。本系列博客结合陈硕所著《Linux多线程服务端编程:使用muduo C++网络库》(后文统称《muduo》)以及muduo源码,探讨我对muduo网络库源码的理解及服务端事件驱动模型设计的总结。 事件驱动模型 多线程服务器模型中,一个很自然的想法是在程序中维护一个线程池,每当有新的连接请求到达时,便为其分配一个线程单独处理其IO请求。这种模型虽然直观,但它仅适用于并发访问量不大的场景,随着并发需求的增加,系统在线程切换间的开销就会急剧增加,并且线程在等待IO时不能去做其他事情,会造成CPU资源的浪费。为了提高服务端的处理效率和吞吐量,大多数服务端设计采用事件驱动模型,将事件的响应与处理分离。其中,IO多路复用机制是实现事件驱动模型的关键。 Reactor模型是一种重要的事件驱动模型,除了本文介绍的m....

Everything that kills me makes me feel alive