Skip to content

Latest commit

 

History

History
19 lines (8 loc) · 899 Bytes

整体设计.md

File metadata and controls

19 lines (8 loc) · 899 Bytes

并发模型

程序使用Reactor模型,主线程使用epoll作为IO多路复用的实现方式,只负责监听文件描述符上是否有事件发生,有的话就将对应的文件描述符交给工作线程来处理, 工作线程是在程序开始时便创建的固定数量线程池,避免了频繁创建线程带来的开销。

项目采用的Reactor模型

并发模型

在项目中有一个主线程和四个工作线程,主线程将任务添加到线程池,任务即就绪待处理的文件描述符,epoll使用EPOLLONESHOT保证一个socket连接在任意时刻都只被一个线程处理

epoll工作模式的选择

epoll的触发模式选择了ET模式,ET模式要比高效很多,不会被同一事件触发多次,每次读都必须循环读取直到EAGIN错误,确保处理完。