Muduo 笔记
来源:互联网 发布:linux删除oracle用户 编辑:程序博客网 时间:2024/06/05 06:21
Channel类
此类代表了一个fd,并且记录了fd对应的几个callback函数,当发生read event时调用什么函数,发生write event时调用什么函数。
Pooler类,此类为基类,具体函数定义参见PollPoller
pooler类主要的方法为poll函数,调用内核poll函数,阻塞等待某个fd发生某种事件,之后把发生的事件,对应的fd,返回给调用者。
另外一类方法是,注册关心的fd(updateChannel), 通过updateChannel实现,将channel对应的fd和关心的事件记录到pollfd中,然后填入pollfd的集合中(之后poll时,等待的就是这个pollfd集合)
EventLoop类
此类最关键的函数就是loop, 一个大循环
调用loop,等待发生某种事件
发生事件后,调用对应fd(channel)的处理函数
EventLoop类包含的成员对象,主要就是
一个looper对象(有loop方法)
包含的主要成员函数,主要就是能够向这个Eventloop中注册事件的方法
updateChannel(channel)
注册这个channel其实就是将其注册到looper中去,所以就是调用的looper.updateChannel
EventLoop, Looper, Channel 三者关系
EventLoop 拥有一个Looper,looper随着EventLoop对象的创建而生成,share_ptr
需要注意的是,looper和Channel对象构造的时候,需要传入其所属的EventLoop,所以channel对象也可以自己调用update,其中调用自己所属的eventloop对象的update函数,
loop_->updateChannel(this)的方式来更新自己。
当我们写多线程程序时,要有一个观念:区分开代码和线程。
代码是静态的,线程是动态的。
相邻的代码可能是在不同的线程执行的。
Thead类
当我们创建一个Thread类对象时,我们想做什么?
我们想异步的执行另外一个执行流。
这个类为我们提供便利,方便从本线程内控制此执行流。
EventLoopThread
此类包含一个Thread对象作为成员对象
包含一个thread入口函数
包含一个init call back
当我们定义一个包含一个Thread对象的类时, 我们想做什么?
EventLoopThread类就是一个包含一个Thread类对象成员的类,创建这个类也是为了方便的创建出另外一个执行流,执行流执行本类中定义的一个成员函数。EventLoopThread是为了方便的生成一个额外的线程,来执行EventLoop.loop()
需要注意的是,EventLoopThread生成一个对象后,执行对象的startLoop函数,会返回一个EventLoop指针,此指针对应的EventLoop对象是在其子线程(本线程生成的线程)的栈空间内,所以说使用EventLoopThread对象的线程并不拥有此对象。
为什么采用这种设计,是为了在主线程中方便的将任务分配给指定的looper去做,只需要调用looper对应的runInLoop, queueInLoop, runAt等函数。
- Muduo 笔记
- dirlt 的muduo笔记
- muduo学习笔记之mutex
- muduo学习笔记之time
- 多线程网络库muduo阅读笔记
- muduo代码阅读笔记及注释
- Muduo之Acceptor源码分析笔记
- Muduo之TcpConnection源码分析笔记
- linux多线程服务器编程 muduo库学习笔记
- linux多线程服务器编程 muduo库学习笔记二
- muduo网络库学习笔记(1):Timestamp类
- muduo网络库学习笔记(2):原子性操作
- muduo网络库学习笔记(3):Thread类
- muduo网络库学习笔记(4):互斥量和条件变量
- muduo网络库学习笔记(5):线程池的实现
- muduo网络库学习笔记(6):单例类(线程安全的)
- muduo网络库学习笔记(7):线程特定数据
- muduo网络库学习笔记(10):定时器的实现
- OkHTTPUTILS的封装
- 如何了解 <![CDATA[ ]]>的作用?
- bzoj1221 [HNOI2001] 软件开发(费用流)
- C++实验23
- 【Ajax】Ajax总结
- Muduo 笔记
- CentOS7.4 最简安装FTP
- Most Powerful (状态dp)
- F a^b
- 快排函数
- DataInputStream 与 DataOutputStream
- Mac 环境下 CMake 安装
- 【Java】5.PriorityBlockingQueue使用与分析
- Q