
muduo源码分析
文章平均质量分 69
gswen
这个作者很懒,什么都没留下…
展开
-
muduo中buffer的设计
本文首先借用陈硕老师关于非阻塞网络编程中buffer的必要性的论述。然后再深入源码,分析buffer的实现Tcpconnection必须要有outputbuffer:想像一个场景:应用程序想向TCP连接发送100k数据,但是在write系统调用中,操作系统只接受80k数据。为了避免阻塞,我们肯定不想在这里阻塞。因为不知道要等多久。程序应该尽快交出控制权,返回eventloop,此时,剩下的20k数据原创 2017-02-27 21:12:45 · 1031 阅读 · 0 评论 -
muduo中定时器的管理
Eventloop中维护了一个定时器队列:boost::scoped_ptr<TimerQueue> timerQueue_;在事件循环中的所有定时器事件都会被放入到这个队列中。放置定时器的相关函数主要是是Eventloop中的下列成员函数:TimerId runAt(const Timestamp& time, const TimerCallback& cb); //在时间点time调用cbTi原创 2017-02-25 16:08:25 · 1303 阅读 · 0 评论 -
读书笔记-限制服务器最大并发连接数的方法
读书笔记–陈硕老师的《linux多线程服务端编程》为什么要限制并发连接数不希望服务器超载file descriptor是稀缺资源,如果出现file descriptor好紧,问题很严重。如果不限制并发连接数可能会引发的问题 对于reactor模式,listening socket是一种特殊的IO对象。当有新连接到来时,此socket变为可读,epoll_wait会返回这一事件,然后在事件处理原创 2017-03-10 13:52:56 · 3680 阅读 · 0 评论 -
将任务加入到Eventloopthread
根据我们分析新线程建立以后,会执行eventloop中的loop函数,而且loop主体是一个while循环,所以在不退出的情况下,新线程将会一直执行这个while循环。我们这里再看一下loop函数的代码:void EventLoop::loop(){ assert(!looping_); assertInLoopThread(); looping_ = true; quit_ =原创 2017-02-25 11:54:19 · 959 阅读 · 0 评论 -
muduo源码解析之EventLoopThread
回到TcpServer,我们记得里面有一个Eventloopthreadpool,根据名字,这是一个线程池,它主要用于管理所有的eventloop,每个eventloop对应一个线程。当新连接到来时,Acceptor事件分发器将连接分发到合适的线程中。线程里面核心是执行Eventloop类里面的loop函数,这个函数主要是执行epoll_wait和一些其他的处理函数。loop是一个while循环。m原创 2017-02-24 15:52:41 · 1081 阅读 · 0 评论 -
muduo源码分析之事件处理器-Channel
前面两篇对Acceptor和TcpConnection的分析中,我们知道他们最终都是通过Channel和Eventpool简历连接,而且真正的事件处理函数也都是封装在Channel类中的。所以这里我把Channel看成事件处理器。 除了事件处理函数之外,Channel也是必须将可能产生事件的文件描述符封装在其中的。这里的文件描述符可以是file descriptor,可以是socket,还可以原创 2017-02-24 11:15:54 · 1125 阅读 · 0 评论 -
muduo源码解析之TcpConnection
在上一篇对Tcpserver的连接事件处理器Acceptor的解析中知道Acceptor为每个连接创建一个TcpConnection结构,通过将这个结构传递给Eventpool实现eventpool和Acceptor的关联。因此TcpConnection是连接后面eventpool的桥梁。本篇将解析TcpConnection类。 首先看一下TcpConnection的类数据成员:原创 2017-02-23 23:56:17 · 872 阅读 · 0 评论 -
muduo的事件分发器-Acceptor
从对muduo的架构解析中我们知道,Acceptor主要是处理服务器的连接事件和事件分发。因为它要处理连接事件,因此muduo把它放在了独立于服务器的事件处理器池(eventloopthreadpool)之外的 一个eventloop中。 其中acceptSocket_是产生事件的socket文件描述符。而acceptChannel是对acceptSocket的封装。因为事件不仅原创 2017-02-23 18:30:37 · 1208 阅读 · 0 评论 -
muduo 架构解析
muduo是一个基于Reactor模式的C++网络库。它采用非阻塞I/O模型,基于事件驱动和回调。它不仅是学习linux服务端多线程网络编程的入门资料,我们也可以通过它来学习C++11。 Reactor是网络编程的一般范式。我们这里从reactor模式为出发点,根据Reactor模式的特点剖析muduo的架构设计。根据wiki的定义: The reactor design patter原创 2017-02-23 16:24:23 · 8876 阅读 · 0 评论 -
muduo中TcpConnection里IO事件的处理
muduo里面对IO事件的处理核心在TcpConnection里面。因为TcpConnection主要是负责TCP连接,因此有关TCP连接上所有的socket读写都发生在TcpConnection中。根据前一节对Buffer的介绍,在这里我们将会看到muduo是怎么使用Buffer的。TcpConnection中有两个Buffer对象: Buffer inputBuffer_; Buffer原创 2017-02-28 23:07:55 · 722 阅读 · 0 评论 -
Nginx源码剖析--ngx_cycle_s结构体分析
前言Nginx框架是围绕着ngx_cycle_t结构体运行的。ngx_cycle_t结构体中包含的信息主要可以分为以下部分:所有模块的配置信息Nginx运行时所需要的一些资源,包括连接池,内存池,打开文件,操作目录等等本文将详细介绍ngx_cycle_t结构体所包含的内容。ngx_cycle_t结构体的内容struct ngx_cycle_s { //保存所有模块的配置结构体原创 2017-09-30 16:03:02 · 1497 阅读 · 0 评论