你的位置:首页 > ASP.net教程

[ASP.net教程]对于观察者模式,Reactor模式,Proactor模式的一点理解


最近就服务器程序IO效率这一块了解一下设计模式中的Reacotr模式和proactor模式,感觉跟观察者模式有些类似的地方,网上也看了一些其他人对三者之间区别的理解,都讲得很仔细,在此根据自己的理解做一点简单的记录和总结,如果理解不对的地方,以后再慢慢深入和更新。

观察者模式:

  也可以称为为 发布-订阅 模式,主要适用于多个对象依赖某一个对象的状态并,当某对象状态发生改变时,要通知其他依赖对象做出更新。是一种1对多的关系。当然,如果依赖的对象只有一个时也是一种特殊的一对一关系。通常,观察者模式适用于消息事件处理,监听者监听到事件时通知事件处理者对事件进行处理(这一点上面有点像是回调,容易与反应器模式和前摄器模式的回调搞混淆)。

Reactor模式:

  reactor模式,即反应器模式,是一种高效的异步IO模式,特征是 回调,当IO完成时,回调对应的函数进行处理。这种模式并非是真正的异步,而是运用了异步的思想,当io事件触发时,通知应用程序作出IO处理。模式本身并不调用系统的异步io函数。

 

Proactor模式:

  Proactor模式,即前摄器模式,也是一种高效的异步IO模式,特征也是回调,当IO事件完成时,回调对应的函数对完成事件作出处理。这种模式是真正意义上的异步,属于系统级的异步,通常要调用系统提供的异步IO函数进行IO处理。

 

Reactor模式和Proactor模式之间的区别:

  Reacor模式不调用系统异步IO函数,是一种仿异步。而Proactor是系统层面上的真正的异步,调用系统提供的异步IO函数。

举个例子,以网络IO为例:当我们从套接字读取数据

  1.如果是Reactor模式,那么,反应器会通知我们 “可以读取数据了”,然后调用回调函数,利用recv函数从套接字读取数据,类似于MFC中的CSocket,在我们重写OnRecieve时,内部要调用Recv函数从套接字读取数据。

  2.如果是Proactor模式,那么会先调用WSARecv函数注册读事件,反应器会通知我们 “数据已经读取了”,回调函数触发时,数据已经被接收到事先提供的缓冲区中,整个IO过程是由操作系统完成的,而不需要我们自己调用recv函数来读取数据,直接在事先提供的缓冲区取数据就可以了。

 

观察者模式和Recactor模式,Proactor模式的主要区别:

  观察者模式,也叫发布-订阅模式,主要是适用于对象间一对多的依赖关系,通常用作消息分发和处理。而Reactor模式和Proactor模式主要用于高效的io模式,明显的特征是“回调”思想的运用,提高效率,避免没有必要的耗时的等待,与对象间的依赖关系无关。

 




福建旅游团购优惠福建旅游线路报价福建旅游指南攻略大全福建旅游住哪里比较方便福建旅游住宿攻略东莞百花洲景点介绍?东莞松山湖百花洲有哪些好玩的? 东莞到梦幻百花洲怎样坐车?东莞到梦幻百花洲在哪坐车? 东莞汽车站到梦幻百花洲怎样坐车?东莞到东山湖梦幻百花洲坐几路车? 东莞梦幻百花洲电话?2015梦幻百花洲门票多少钱? 春意渐浓百花竞放 从化踏春赏花去 2015开平碉楼油菜花节几号到几号?开平碉楼油菜花节门票价格? 2015年开平碉楼油菜花节时间及地点?开平碉楼油菜花节开始时间? 味道河南 照着清单办年货吧 南海影视城门票团购多少钱?佛山南海影视城优惠价? 南海影视城景点介绍?佛山南海影视城有什么好玩的? 南海影视城门票价格?佛山南海影视城怎么收费? 南海影视城图片?佛山南海影视城好玩吗? 香港哪里能买到玉器? L签和G签有什么区别?去香港办L签好还是办G签好? 香港哪里可以买到手表?哪里有表行? 去香港买戒指哪里好?香港有哪些珠宝店? 08055G105ZAT2A Datasheet 08055G105ZAT2A Datasheet SQCA5C103KATME Datasheet SQCA5C103KATME Datasheet AQ12EA5R1CAJME Datasheet AQ12EA5R1CAJME Datasheet 衢州去香港游 衢州去香港游 衢州去香港游 吉林去香港迪士尼旅游 吉林去香港迪士尼旅游 吉林去香港迪士尼旅游 延吉市去港澳游 延吉市去港澳游 延吉市去港澳游