共 1,394 篇文章
共 6,621 篇文章及评论
- Association for Computing Machinery TechNews (ACM)
- Go Parallel! (Dr. Dobbs)
- HPCwire (Tabor Communications, Inc.)
- insideHPC (John West)
- Joe Duffy's Weblog (Microsoft)
- Microsoft Parallel Programming Development Center (Microsoft Germany)
- MultiCoreInfo.com
- scalability.org (Scalable Informatics)
- Software Dev Blog (Intel Germany)
- Soft Talk Blog (Intel United Kingdom)
- The Moth (Microsoft)
Archives
帖子来自 citysheep_ 
高性能I/O设计模式 Reactor 和 Proactor
作者: citysheep_ (1 篇文章) 日期: 十一月 30, 2010 在 4:09 下午
评论 (0)
文章还介绍了为Reactor和Proactor模式构建一个通用的,统一的对外接口并是一个完全可移植的开发框架选择方案:TProactor (ACE compatible Proactor) :http://www.terabit.com.au/solutions.php。因为Linux对aio支持的不完整,所以ACE_Proactor框架在linux上的表现很差,大部分在windows上执行正常的代码,在Linux则运行异常,甚至不能编译通过。这个问题一直困扰着很大多数ACE的用户,现在好了,有一个TProactor帮助解决了在Linux不完整支持AIO的条件下,正常使用(至少是看起来正常)ACE_Proactor。 文章主要摘要: ----------> 两种I/O多路复用模式:Reactor和Proactor 一般地,I/O多路复用机制都依赖于一个事件多路分离器(Event Demultiplexer)。分离器对象可将来自事件源的I/O事件分离出来,并分发到对应的read/write事件处理器(Event Handler)。开发人员预先注册需要处理的事件及其事件处理器(或回调函数);事件分离器负责将请求事件传递给事件处理器。两个与事件分离器有关的模式是Reactor和Proactor。Reactor模式采用同步IO,而Proactor采用异步IO。 在Reactor中,事件分离器负责等待文件描述符或socket为读写操作准备就绪,然后将就绪事件传递给对应的处理器,最后由处理器负责完成实际的读写工作。 而在Proactor模式中,处理器--或者兼任处理器的事件分离器,只负责发起异步读写操作。IO操作本身由操作系统来完成。传递给操作系统的参数需要包括用户定义的数据缓冲区地址和数据大小,操作系统才能从中得到写出操作所需数据,或写入从socket读到的数据。事件分离器捕获IO操作完成事件,然后将事件传递给对应处理器。比如,在windows上,处理器发起一个异步IO操作,再由事件分离器等待IOCompletion事件。典型的异步模式实现,都建立在操作系统支持异步API的基础之上,我们将这种实现称为“系统级”异步或“真”异步,因为应用程序完全依赖操作系统执行真正的IO工作。 举个例子,将有助于理解Reactor与Proactor二者的差异,以读操作为例(类操作类似)。 在Reactor中实现读: - 注册读就绪事件和相应的事件处理器 - 事件分离器等待事件 - 事件到来,激活分离器,分离器调用事件对应的处理器。 - ...
