本文主要是介绍Reactor模式,Proactor模式以及采用Reator模拟Proactor模式详解,以及他们在网络IO处理中的应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
关于Reactor模式和Proactor模式原理性的详细介绍可以参见:
如何深刻理解Reactor和Proactor? - 小林coding的回答 - 知乎
不管是Reactor模式还是Proactor模式都是事件驱动模式,采用了面向对象的思想,如果是IO复用的方式实现高并发是基于面向过程的思想。
Reactor模式是一种同步IO模式,什么是同步IO操作什么是异步IO操作可以参见UNP 卷1 P126:
- 同步IO操作导致请求进程阻塞,直到IO操作完成。对于不同类型的IO模型(Linux下有5种,可以看我的另一篇博客:Unix的五种IO模型),请求进程阻塞的阶段可能不一定一致,但是一定全部或者是部分阶段有阻塞。
- 异步IO操作不导致请求进程阻塞。事实上对于需要IO的进程,异步IO操作只需要把请求进程的缓冲区地址告诉内核,IO的操作完全由内核完成,在内核进行IO操作的时候,请求进程可以继续执行其他代码。
Reactor 模式也叫 Dispatcher 模式,即 I/O 多路复用监听事件,收到事件后,根据事件类型分配(Dispatch)给某个进程 / 线程。
Reactor 模式的工作流程:
原理:主线程只负责监听文件描述符上是否有事件发生,有的话就立即将该事件通知工作线程,除此之外,主线程不做其他任何的工作,读写数据,接受新的连接,以及处理客户请求均在工作线程完成。
Proactor模式是一种异步IO模式,
原理: proactor模式所有的IO操作都是由主线程以及内核完成,工作线程只负责业务逻辑。
采用reactor模拟proactor模式:
原理:主线程执行数据读写操作,读写完成后主线程向工作线程通知这一“完成事件”,那么从工作线程的角度来看,工作线程就获得了数据读写的结果,只要对这些读写结果做逻辑处理(即业务逻辑)
参考资料:
游双 Linux高性能服务器编程
这篇关于Reactor模式,Proactor模式以及采用Reator模拟Proactor模式详解,以及他们在网络IO处理中的应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!