Reactor模型库之boost::asio::io_service与ACE_Reactor
2015-10-09 15:50
417 查看
boost::asio::io_service与ACE_Reactor均是应用了Reactor同步IO模型,下面通过类比对这两个库进行学习。
“Reactor模式是处理并发I/O比较常见的一种模式,中心思想就是,将所有要处理的I/O事件注册到一个中心I/O多路复用器上,同时主线程阻塞在多路复用器上;一旦有I/O事件到来或是准备就绪(区别在于多路复用器是边沿触发还是水平触发),多路复用器返回并将相应I/O事件分发到对应的处理器中。
这里有三个重要的组件:
多路复用器:由操作系统提供,在linux上一般是select, poll, epoll等系统调用。
事件分发器:将多路复用器中返回的就绪事件分到对应的处理函数中。
事件处理器:负责处理特定事件的处理函数。
因为这种模型经常使用,所有不少人对简单的系统调用做了一层封装,形成跨平台的事件处理库,比较典型的有:libevent,libev,boost
asio、ACE_Reactor等。”(引号部分引用自网页)。
boost::asio::io_service与ACE_Reactor的区别是,后者可以对除io外的事件进行分发处理。
实例说明:使用boost::asio::io_service与boost::asio::deadline_timer实现定时任务:
首先,需要创建的主要角色有:
1、一个主线程,一个子线程(负责运行io_service),一个定时器;
然后,实现步骤如下:
1、定义定时器,定时器与io_service对象绑定,定时器与到时操作方法绑定;
2、创建子线程运行io_service。
后台运行解析:
当定时器时间到时,io_service监控到以后触发与定时器绑定的操作方法。
实例说明:使用ACE_Reactor与ACE_Process_Manage,监控启动进程,进程崩溃后自动重启。
首先,需要创建的主要角色有:
1、一个主进程,一个进程管理器ACE_Process_Manager对象,若干个子进程;
2、继承自ACE_Event_Handler的事件处理器,参数是触发该事件的子进程,主要是进行子进程崩溃后的重启;
3、事件分发器,一般直接使用ACE_Reactor的实例,监控子进程崩溃事件。
然后,实现步骤如下:
1、绑定ACE_Process_Manager对象与ACE_Reactor实例;
2、ACE_Process_Manager对象创建子进程,通过ACE_Process_Manager的register_handler方法,将事件处理器与触发此事件的具体子进程绑定。
后台实现解析:
当子进程崩溃退出时,主进程通过ACE_Reactor监听(同步等待)到以后触发事件处理器,事件处理器回调子进程,进行重启。
由此可见Reactor模型是处理多进程、多线程任务的常用模型之一,根据应用程序与操作系统之间的操作分类,属于同步处理模型。但是如果对io_service或者ACE_Reactor单独创建线程或进程执行,
则对外部主程序来说,则成为异步调用,因此也可以用来构建异步网络程序(这个异步是指客户端与服务端的交互)。(即对该对象 内部是同步的,外部是异步的。)
“Reactor模式是处理并发I/O比较常见的一种模式,中心思想就是,将所有要处理的I/O事件注册到一个中心I/O多路复用器上,同时主线程阻塞在多路复用器上;一旦有I/O事件到来或是准备就绪(区别在于多路复用器是边沿触发还是水平触发),多路复用器返回并将相应I/O事件分发到对应的处理器中。
这里有三个重要的组件:
多路复用器:由操作系统提供,在linux上一般是select, poll, epoll等系统调用。
事件分发器:将多路复用器中返回的就绪事件分到对应的处理函数中。
事件处理器:负责处理特定事件的处理函数。
因为这种模型经常使用,所有不少人对简单的系统调用做了一层封装,形成跨平台的事件处理库,比较典型的有:libevent,libev,boost
asio、ACE_Reactor等。”(引号部分引用自网页)。
boost::asio::io_service与ACE_Reactor的区别是,后者可以对除io外的事件进行分发处理。
实例说明:使用boost::asio::io_service与boost::asio::deadline_timer实现定时任务:
首先,需要创建的主要角色有:
1、一个主线程,一个子线程(负责运行io_service),一个定时器;
然后,实现步骤如下:
1、定义定时器,定时器与io_service对象绑定,定时器与到时操作方法绑定;
2、创建子线程运行io_service。
后台运行解析:
当定时器时间到时,io_service监控到以后触发与定时器绑定的操作方法。
实例说明:使用ACE_Reactor与ACE_Process_Manage,监控启动进程,进程崩溃后自动重启。
首先,需要创建的主要角色有:
1、一个主进程,一个进程管理器ACE_Process_Manager对象,若干个子进程;
2、继承自ACE_Event_Handler的事件处理器,参数是触发该事件的子进程,主要是进行子进程崩溃后的重启;
3、事件分发器,一般直接使用ACE_Reactor的实例,监控子进程崩溃事件。
然后,实现步骤如下:
1、绑定ACE_Process_Manager对象与ACE_Reactor实例;
2、ACE_Process_Manager对象创建子进程,通过ACE_Process_Manager的register_handler方法,将事件处理器与触发此事件的具体子进程绑定。
后台实现解析:
当子进程崩溃退出时,主进程通过ACE_Reactor监听(同步等待)到以后触发事件处理器,事件处理器回调子进程,进行重启。
由此可见Reactor模型是处理多进程、多线程任务的常用模型之一,根据应用程序与操作系统之间的操作分类,属于同步处理模型。但是如果对io_service或者ACE_Reactor单独创建线程或进程执行,
则对外部主程序来说,则成为异步调用,因此也可以用来构建异步网络程序(这个异步是指客户端与服务端的交互)。(即对该对象 内部是同步的,外部是异步的。)
相关文章推荐
- React Native -- StyleSheet
- ReactiveCocoa<一>
- React Native入门遇到的一些问题
- react native camera
- 这样好用的ReactiveCocoa,根本停不下来【转载】
- React框架
- React入门2
- React入门1
- React使用指南
- ReactJs 组件间数据传递
- reactor和proactor的区别
- ACE反应器(Reactor)模式(4)
- ACE反应器(Reactor)模式(3)
- ACE反应器(Reactor)模式(2)
- ACE反应器(Reactor)模式(1)
- React-Native学习指南
- Reactor 和 proactor 的区别
- React Native 初探(iOS)
- 初探React,将我们的View标签化
- 初学Reactjs