[学习笔记]muduo(1)

看书后的小总结

第一部分 Reactor模式的现代化实现

包括EventLoop Poller Channel TimerQueue EventLoopThread等class

1.1 EventLoop

  1. 创建了 EventLoop 对象的线程是 IO 线程,其主要功能是运行事件循环EventLoop::loop()
  2. EventLoop 的生命周期通常和所属线程一样长 , 它不必是 heap 对象
  3. 时间循环必须在IO线程中执行 EventLoop::loop()进行检查
  4. 每个线程至多有一个对象,那么可以让EventLoop的static成员函数getEventLoopOfCurrentThread()返回这个对象.
  5. 我们需要确定哪些线程是安全的,可以跨线程调用,哪些成员函数只能在某个特定线程中调用(主要是IO线程), 为了能在运行时检查,EventLoop 提供了isInLoopThread() 和 assertInLoopThread()等函数

1.2 Reactor核心事件分发机制

即将IO复用拿到的IO事件分发给各个文件描述符的事件处理函数

1.2.1 Channel class

  1. 每个 Channel 对象自始至中只属于一个EventLoop,因此每个Channel 对象只属于某一个IO线程
  2. 每个Channel 对象自始至终只负责一个文件描述符 fd 的 IO 事件分发,但它并不拥有,也不会在析构的时候关闭
  3. Channel 会把不同的 IO 事件分发给不同的回调
  4. 用户一般不直接使用 Channel , 而是使用更上层的封装,如TCPConnection
  5. 核心: Channel::handEvent() , 由EventLoop::loop()调用,它的功能是根据revent_ 的值分别调用不同的用户回调

1.2.2 Poller class

  1. 是IO复用的封装,现在是个具体类,但在muduo是个抽象基类
  2. 是 EventLoop 的间接成员,只供其owner EventLoop 在 IO 线程中调用,因此无需加锁
  3. 生命周期与 EventLoop 相等
  4. Poller 在析构前必须自己unregister , 避免空悬指针
  5. 核心 : Poller::poll() ,

1.2.3 TimerQueue 定时器

未完待续…

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值