事件驱动模型,最为经典的就是Reactor模型和Proactor模型
C++网络方面用的比较多的库是libevent和boost.asio,两者都是跨平台的
- 其中libevent是基于Reactor实现的
- 而boost.asio是基于Proactor实现的
Reactor和Proactor模式的主要区别就是真正的操作(如读/写)是由谁来完成的
- Reactor中需要应用程序自己读取或者写入数据
- 而在Proactor模式中,应用程序不需要进行实际的读/写过程,操作系统会读取缓冲区或者写入缓冲区到真正的IO设备,应用程序只需要从缓冲区读取(操作系统已经帮我们读好了)或者写入缓冲区(操作系统会帮我们写入)即可。在Proactor模式中,用户发起异步操作之后就返回了,让操作系统去处理请求,然后等着回调到完成事件函数中处理异步操作的结果。