框架分析
整体流程图

简单解析
绿色为主线程,蓝色为子线程
- 主线程启动 epoll 监听新的连接,当有新的连接时通过 eventfd 通知子线程
- 主线程启动时会利用
EventLoop启动多个子线程,每个子线程由IOThread处理 - 子线程启动 epoll 监听 eventfd 以及一些已经建立的连接的读写事件
- 子线程判断如果为 eventfd,进一步判断分为三种情况,0 为注册新的连接,1 为外部线程投递的发送事件,2 为关闭事件
- 如果为新连接则将新连接放入 epoll 中。
- 如果为外部投递的发送事件,则判断是否能直接发送,如不能则放入发送队列并监听 EPOLLOUT 事件
- 如果为外部投递的关闭事件,则关闭 epoll 监听,子线程退出
- 如果不是 event 事件,则判断 epoll 是否返回错误,如果返回错误则清除该描述符,并监听下一个
- 如果不是 event 事件,且没有错误,那就是读写事件,分别处理读写请求即可。
- 读请求将收到的消息 echo 给对方(可选,测试用)
- 写请求又回到 6 的处理逻辑。
类关系图
