muduo整体流程
one loop per thread + thread pool 架构实现
1 结构:
typedef std::vector PollFdList pollfds_
typedef std::map<int, Channel*> ChannelMap channels_
typedef std::vector<Channel*> ChannelList activeChannels
2 类:
Accepor 生命周期由 TcpServer 控制, TcpServer 直接供用户使用,生命周期由用户可控制。
TcpServer class 管理 accept 获得 TcpConnection,新连接到达, Accepor回调newConnection(),后者创建TcpConnection对象并加入ConnectionMap
TcpConnection使用Channel来获取socket上IO事件,进行处理或传给用户。
3 Buffer:水平触发,分读写区域
读: 利用了额外的栈空间。
写:尝试一次发完,否则剩余数据放入outputbuffer以后发送。
4 多线程:利用EventLoopThreadPool,每次new TcpConnection分配一个loop
5 线程安全策略:runInLoop 将非IO线程的调用放入IO线程队列,供主线程回调。