reactor和proactor模式
reactor和proactor模式
分类:设计模式
2013-01-02 08:11
4568人阅读
评论(3)
收藏
举报
aio
java
Java
JAVA
proactor
reactor
设计模式
首先分享一下,我在网上看到的两篇不错的文章:正是这两篇文章才理解了reactor和proactor模式; Reactor模式,或者叫反应器模式 高性能IO设计的Reactor和Proactor模式 首先就第一篇《Reactor模式,或者叫反应器模式》做一下笔记:
刚开店做生意,老板为了给顾客一个美好的印象,给顾客最好的服务,一对一:
随着经营的生意越来越好,顾客多了,不能服务员也多吧,那样得支出的成本也太大了,要是一下子来个1000个顾客,难道老板还得养活1000个服务员,没办法,得改变这种服务模式,但又不能让顾客感到这里的服务下降了,怎么办呢?
改革以后,有没有觉得和我们平时去大排档啊,街边小吃店的服务模式很相似是不是, 为什么不说和酒店服务很像,其实还真不像,一般XXX星级的饭店的服务,还真是上一种经营模式,为什么他们要这样呢, 因为,他们是高富帅啊,顾客消费也高,自然老板的收入也高,所以老板也乐子不疲啊。我们是屌丝,请客都只是去个大排档就好了。
改革后的模式就是reactor模式,顾客通过呼叫服务员(event事件)通知服务员,菜单写好了,服务员就会把菜单交给厨师(事件处理器),厨师就会去做菜了。
现在知道reactor模式的由来了吧,知道一个事情的始末会让我们更好的理解它。 下面对第二篇《高性能IO设计的Reactor和Proactor模式》做一下笔记: 这里主要是讲reactor模式和proactor模式的区别:其实就是对数据处理方式变了导致监听事件方式也转变了。 当然,如果还是以第一篇那样以饭店的经营模式来讲解的话,proactor模式应该是这样的:
我们知道每一个饭店都有自己的招牌菜去吸引顾客。当然,其实这道菜你也会做,只是别人做的比你更好,更美味。有一天,一群高富帅来了这家大拍档:
老板就是老板,人面广啊,自家厨师不会做,可以让更专业的人去做,省时省事省心啊!
其实这里我们都能看出reactor模式和proactor模式的一点点区别了吧!只是还不了解具体的细节。 第二篇《性能IO设计的Reactor和Proactor模式》就是干这个事的,给我们介绍具体细节和区别,我也是读了好几遍,慢慢画个流程图才理解了啊。 其实说到底就是一句广告语:把事情交给更专业的人,你会更开心。
好吧,以下是copy过来,做了少少修改的:转换为自己的理解。
在高性能的I/O设计中,有两个比较著名的模式Reactor和Proactor模式,其中Reactor模式用于同步I/O,而Proactor运用于异步I/O操作。
同步和异步是针对应用程序和内核的交互而言的; 同步指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪, 异步是指用户进程触发IO操作以后便开始做自己的事情,而当IO操作已经完成的时候会得到IO完成的通知。
阻塞和非阻塞是针对于进程在访问数据的时候,根据IO操作的就绪状态来采取的不同方式,说白了是一种读取或者写入操作函数的实现方式; 阻塞方式下读取或者写入函数将一直等待, 非阻塞方式下,读取或者写入函数会立即返回一个状态值。
下面我们来看看Proactor模式中读取操作和写入操作的过程:
最后来两张图做个总结:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |