网络方面用的比较多的库是libevent和boost.asio,两者都是跨平台的.其中libevent是基于Reactor实现的,而boost.asio是基于Proactor实现的.Reactor和Proactor模式的主要区别就是真正的操作(如读/写)是由谁来完成的,Reactor中需要应用程序自己读取或者写入数据,而在Proactor模式中,应用程序不需要进行实际的读/写过程,操作系统会读取缓冲区或者写入缓冲区到真正的IO设备,应用程序只需要从缓冲区读取(操作系统已经帮我们读好了)或者写入(…
转载于:http://www.cnblogs.com/TianFang/archive/2006/12/31/608952.html 当 OS 平台支持异步操作时,一种高效而方便的实现高性能 Web 服务器的方法是使用前摄式事件分派.使用前摄式事件分派模型设计的 Web 服务器通过一或多个线程控制来处理异步操作的完成.这样,通过集成完成事件多路分离(completion event demultiplexing)和事件处理器分派,前摄器模式简化了异步的 Web 服务器. 异步的 Web 服务器将…
Java NIO非堵塞技术实际是采取反应器模式,或者说是观察者(observer)模式为我们监察I/O端口,如果有内容进来,会自动通知我们,这样,我们就不必开启多个线程死等,从外界看,实现了流畅的I/O读写,不堵塞了. 同步和异步区别:有无通知(是否轮询),异步:处理完后会通知请求方堵塞和非堵塞区别:操作结果是否等待(是否马上有返回值),只是设计方式的不同,堵塞:需要等待完成后,开始下面的工作 NIO 有一个主要的类Selector,这个类似一个观察者,只要我们把需要探知的socketchann…
转载于:http://www.cnblogs.com/TianFang/archive/2006/12/18/596012.html 定时器的实现 通过Reactor机制,还可以很容易的实现定时器的功能,使用方式如下. 编写一个事件反应器,重载handle_timeout()方法,该方法是定时器的触发时间到时,会自动触发该方法. 通过Reactor的schedule_timer()方法注册定时器. 启动reacotr的handle_events()事件分发循环. 当不想使用定时器时,可以通过Re…
转载于:http://www.cnblogs.com/TianFang/archive/2006/12/18/595808.html 在Socket编程中,常见的事件就是"读就绪","写就绪",通过对这两个事件的捕获分发,可以实现Socket中的异步操作. Socket编程中的事件处理器 在前面我们已经介绍过,在ACE反应器框架中,任何都必须派生自ACE_Event_Handler类,并通过重载其相应会调事件处理函数来实现相应的回调处理的.在Socket编程中,我们…
转载于:http://www.cnblogs.com/TianFang/archive/2006/12/13/591332.html 1.ACE反应器框架简介 反应器(Reactor):用于事件多路分离和分派的体系结构模式 通常的,对一个文件描述符指定的文件或设备, 有两种工作方式: 阻塞与非阻塞.所谓阻塞方式的意思是指, 当试图对该文件描述符进行读写时, 如果当时没有东西可读,或者暂时不可写, 程序就进入等待状态, 直到有东西可读或者可写为止.而对于非阻塞状态, 如果没有东西可读, 或者不可写…
反应器类派生于AcRxObject而不是AcDbObject,因为他们不是数据库对象,没有ID,拥有关系也不适用. 不同类型的反应器接收不同类型的通知事件.派生于AcDbDatabaseReactor的数据库反应器(database reactor)接收与数据库状态相关的事件,例始当一个对象被加入到数据库,在数据库中被修改或删除.这种反应器的通知发送者是数据库,所以它被加入到数据库的反应器列表中.派生于AcDbObjectReactor的对象反应器(object reactor)负责接收对象(o…
转载于:http://www.cnblogs.com/TianFang/archive/2006/12/18/595938.html 在服务器端使用Reactor框架 使用Reactor框架的服务器端结构如下: 服务器端注册两种事件处理器,ClientAcceptor和ClientService ,ClientService类负责和客户端的通信,每一个ClientService对象对应一个客户端的Socket连接. ClientAcceptor专门负责被动接受客户端的连接,并创建ClientSe…
IO设计模式:Reactor和Proactor对比 平时接触的开源产品如Redis.ACE,事件模型都使用的Reactor模式:而同样做事件处理的Proactor,由于操作系统的原因,相关的开源产品也少:这里学习下其模型结构,重点对比下两者的异同点: 反应器Reactor Reactor模式结构 Reactor包含如下角色: Handle 句柄:用来标识socket连接或是打开文件: Synchronous Event Demultiplexer:同步事件多路分解器:由操作系统内核实现的一个函数…
讲解IO思路: BIO(一个连接一个线程) -->大并发问题-->NIO(操作系统层面:IO多路复用) -->NIO两个问题:1.谁去监听就绪(Boss),2.谁来处理已就绪(Work) -->AIO:NIO的两个问题都不存在:1.每一个IO操作注册回调函数(异步),不需要多路复用器去监听就绪事件(监听完成事件?),2.无需处理IO操作,操作系统完成 简而言之,NIO的多路复用器,是通知你IO就绪事件,AIO的回调是通知你IO完成事件.AIO做的更加彻底一些. 反应器Reactor…