Poller Class
源码阅读(muduo/net
)
@(Linux多线程服务端编程:使用muduoC++网络库读书笔记)
Poller Class
是一个抽象基类,是对
I
/
O
多
路
复
用
I/O多路复用
I/O多路复用的抽象。它是基于poll(2)
的PollPoller Class
(muduo/net/Poller)和基于epoll(4)
的EPollPoller Class
(muduo/net/Poller)的基类。
数据成员
EventLoop* ownerLoop_
Poller
所在的EventLoop
,Poller
只供ownerLoop_
在 I / O 线 程 I/O线程 I/O线程调用,所以无须加锁,不必考虑线程安全。其生命期同其所属的EventLoop
std::map<int, Channel*> channels_
Poller
所监视的文件描述符,但它不拥有这些Channel
,Channel
在析构前,需自己unregister
(EventLoop::removeChannel
),避免指针空悬。
函数成员
Poller
构造函数,只负责初始化
ownerLoop_
poll
纯虚函数,等待就绪事件
timeoutMs
:等待时间
activeChannels
:已就绪事件
返回值:当前的时间戳
void updateChannel(Channel* channel)
纯虚函数,更新/添加channel
void removeChannel(Channel* channel)
纯虚函数,移除channel
bool hasChannel(Channel* channel) const
检查
channel
是否被当前Poller
监视,即是否在channels_
中
statci Poller* newDefaultPoller(EventLoop* loop)
提供一个静态工厂方法,根据环境变量MUDUO_USE_POLL决定创建PollPoller还是EPollPoller(吴悠大佬)
还没学到定义那儿
assertInLoopThread() const
调用
EventLoop::assertInLoopThread()
判断是否是在 I / O 线 程 I/O线程 I/O线程中。