Proactor和Reactor的区别

发表于 2018-03-12 10:21:20
0 169
无所谓啊
  • 访问次数:146
  • 积分:355

Proactor和Reactor都是并发编程中的设计模式。他们都是用于派发/分离IO操作事件的。所谓的IO事件也就是诸如read/write的IO操作。"派发/分离"就是将单独的IO事件通知到上层模块。两个模式不同的地方在于,Proactor用于异步IO,而Reactor用于同步IO。
Reactor:
1 事件句柄注册自己感兴趣的io事件
2 多路事件分发器等待io事件
3 io事件到来并唤醒多路事件分发器,多路器调用应用事件句柄
4 事件句柄进行实际读操作,处理读操作,重新声明感兴趣的io操作,并将控制权返回给多路分发器

为了提高处理速度,也可以提供多线程并发处理

Proactor :
1 事件句柄初始化一个异步读操作,此时该句柄并不在意异步操作结果,而是要获得完成事件而注册
2 事件多路器等待直到io事件完成
3 当事件多路器等待io事件时,操作系统在一个并行的内核线程上处理读操作,并将数据放到一个用户定义的缓冲中,并通知事件多路器操作完成。
4 事件多路器调用事件句柄。
5 事件句柄从用户定义缓冲中获得用户数据并操作,然后开始新的异步操作并将控释返回事件多路器
可以看出,两个模式的相同点,都是对某个IO事件的事件通知(即告诉某个模块,这个IO操作可以进行或已经完成)。在结构上,两者也有相同点:demultiplexor负责提交IO操作(异步)、查询设备是否可操作(同步),然后当条件满足时,就回调handler。
不同点在于,异步情况下(Proactor),当回调handler时,表示IO操作已经完成;同步情况下(Reactor),回调handler时,表示IO设备可以进行某个操作(can read or can write),handler这个时候开始提交操作。

您需要登录才可以查看附件  登录  |  立即注册

0

无所谓啊 最后编辑 于 2018-03-12 10:21:20
回帖
您需要登录才可以回帖  登录  |  立即注册

热门课程

© 2017 WoFu.La v2.0 苏州宽敬信息科技有限公司 All Rights Reserved. 苏ICP备16029533号
进入训练营 >