两种高效的事件处理模式:
•同步I/O模型通常用于实现Reactor模式
•异步I/O模型则用于实现Proactor模式
Reactor—反应堆
Reactor模式:
原理:这种模式的要求是主线程(I/O处理单元)监听文件描述符上是否有事件发生,有事件发生就立即将该事件通知工作线程。
主线程只负责监听文件描述符上是否有事件发生,不做其他的工作;工作线程负责其他工作,如接受连接,读写数据等。
Proactor模式:
原理:相比于Reactor模式,Proactor模式下主线程要比较辛苦,主线程要执行数据读写操作,Proactor模式将所有I/O操作都交给主线程和内核来处理 工作线程仅仅负责负责逻辑处理(处理客户请求,往事件表中注册写就绪事件。)
同步I/O模拟Proactor模式:
原理:从sockfd上读取数据以及往sockfd上写数据都在主线程中完成,工作线程只负责对主线程读取到的客户请求进行处理,并在处理完客户请求后往事件表中注册sockfd上的写就绪事件,以便可以将处理后的结果写入sockfd.
每一种模式的具体工作流程请参考《linux高性能服务器编程》