Reactor和Proactor的区别

1.先解释同步和异步:

同步异步是一种通信机制。

同步:调用方需要保持等待直到I/O操作完成。

异步:调用方可以不用保持等待,只需要操作系统完成I/O操作通知调用方就可以了。

2.再说说阻塞和非阻塞:

阻塞非阻塞是一种调用机制。

阻塞:调用方等待I/O操作完成后才返回,就是阻塞的。

非阻塞:调用方不需要等待IO操作完成就立即返回。非阻塞的情况下,常常需要多次调用去check,才能获得IO操作的结果。

3.

2*2的比较

同步阻塞
调用者发起I/O操作请求,等待I/O操作完成再返回。

同步非阻塞
调用者发起I/O操作请求,询问I/O操作的状态,如果未完成,则立即返回,该调用者不断主动询问操作系统是否完成I/O操作;如果完成,则返回结果.

异步阻塞
调用者发起I/O操作请求,等待I/O操作完成再返回。I/O操作的过程不需要等待,操作完成后通过通知或回调获得结果。

异步非阻塞
调用者发起I/O操作请求,询问I/O操作的状态,如果未完成,则立即返回;如果完成,则返回结果。I/O操作的过程不需要等待,操作完成后通过通知或回调获得结果。

4.Reactor的读为例:

  同步I/O

 应用程序注册读就需事件和相关联的事件处理器 ,事件分离器等待事件的发生, 当发生读就需事件的时候,事件分离器调用第一步注册的事件处理器, 事件处理器首先执行实际的读取操作,然后根据读取到的内容进行进一步的处理。


5.Proactor的读为例:


 异步I/O


 应用程序初始化一个读操作,然后注册相应的事件处理器, 事件分离器等待读取操作完成事件, 在事件分离器等待读取操作完成的时候,操作系统调用内核线程完成读取操作,并将读取的内容放入用户  传递过来的缓存区中。这也是区别于ReactorProactor中,应用程序需要传递缓存区。 事件分离器捕获到读取完成事件后,激活应用程序注册的事件处理器,事件处理器直接从缓存区读取数据,而不需要进行实际的读取操作。


总结:

两个模型的区别在于对读时间的操作者。前者是用户程序自己执行读和写,后者是用户程序把缓冲区给了交给内核,内核读或写完成以后通知应用程序。





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值