同步I/O模型通常用于实现 Reactor
模式,异步I/O模型通常用于实现 Proactor
模式。(不是绝对的,同步I/O也可模拟出 Proactor
模式)
Reactor模式
原理
Reactor
模式要求主线程(I/O处理单元)只负责监听文件描述符上是否有事件就绪,如果有则将该就绪事件通知给工作线程(逻辑单元)。除此之外主线程不会进行其他实质性的工作,读写数据、接收新连接、业务逻辑处理全部在工作线程中完成。
工作流程
这里以 epoll_wait
为例,使用同步I/O模型实现的 Reactor
模式的工作流程如下:
- 主线程往
epoll
内核事件表中注册socket
上的读就绪事件。 - 主线程调用
epoll_wait
开始对socket
的读事件进行监控。 - 如果
socket
读就绪,epoll_wait
会通知主线程,主线程则将socket
可读事