解释:
- channel是muduo中的事件分发器,它只属于一个EventLoop,Channel类中保存着IO事件的类型以及对应的回调函数,每个channel只负责一个文件描述符,但它并不拥有这个文件描述符。channel是在epoll和TcpConnection之间起沟通作用,故也叫做通道,其它类通过调用channel的setCallbcak来和建立channel沟通关系。
- 正如其名,muduo中Channel是底层通过Socket建立TCP通信的通道,用于事件分发。Channel对fd的事件相关方法进行了封装,例如负责注册fd的可读或可写事件到EvenLoop,又如fd产生事件后要如何响应。
Channel与fd是聚合关系,一个fd对应一个channel,不实际拥有fd,Channel析构是不会close当前fd。文件描述符fd可以是socketfd、eventfd、timerfd或signalfd。
Channel一般作为其他类的成员,不被直接使用,而使用更上层的封装,例如用于服务端的Acceptor,用于客户端的Connector,用于一次客户端服务端通信的TcpConnection。最重要的是,EventLoop通过一个vector
Channel的生命期由其owner calss负责管理,且成员函数都只能在IO线程调用,因此更新数据成员都不必加锁。
channel源码分析 https://www.cnblogs.com/Lj-ming/p/14773415.html
