Reference: https://www.dre.vanderbilt.edu/~schmidt/PDF/Proactor.pdf Proactor是常见的网络AIO模型。...在性能上异步应该是有一定优势的,但是Linux直接用epoll模拟AIO,所以在Linux上做Proactor是多此一举,服务器依然以Reactor为主流。
Boost ASIO proactor 浅析 前情提要: Boost asio 的socket的异步非阻塞模式才有的是proactor模式,当IO操作介绍后回调相应的处理函数。...ASIO在Linux平台下的实现基于epoll,但是epoll只支持reactor模式,ASIO通过封装在epoll上实现了proactor。...提到ASIO proactor,ASIO中的所有异步操作都是基于io_service实现的,io_service是ASIO中的任务队列,并且他负责调用epoll_wait等待IO事件到来,对io_service...的实现参加前边的blog:http://www.cnblogs.com/zhiranok/archive/2011/09/04/boost_asio_io_service_CPP.html Proactor
proactor关心的是完成比如读完了,就通知你。...两个与事件分离器有关的模式是Reactor和Proactor。 Reactor模式采用同步IO,而Proactor采用异步IO。 在Reactor中,事件分离器负责等待文件描述符或socket。...而在Proactor模式中,处理器--或者兼任处理器的事件分离器,只负责发起异步读写操作。 IO操作本身由操作系统来完成。...举个例子,将有助于理解Reactor与Proactor二者的差异,以读操作为例(类操作类似)。...两个模式不同的地方在于,Proactor用于异步IO,而Reactor用于同步IO。
关于Proactor Proactor英文意思前摄器,是一种异步的IO设计模式。...这也是区别于Reactor的一点,Proactor中,应用程序需要传递缓存区。...从上面的描述中能够看到,Proactor模式中,操作系统相当于直接把IO操作的两阶段工作都给干了,这也要求应用程序在注册异步任务时,需要传递一个缓存区,用来存放结果数据。...总结 关于Reactor和Proactor这两种IO设计模式,我们举个实际生活中的例子:Reactor模式就是快递员在楼下,给你打电话告诉你快递到了,你需要自己下楼来拿快递。...而在Proactor模式下,快递员直接将快递送到家里面的指定位置。
Reactor与Proactor Reactor ?...Proactor ? Proactor是基于异步I/O的, 他将所有的I/O操作都交给主线程和内核来处理, 工作线程仅仅负责业务逻辑.
Proactor模式Proactor模式的核心思想是:当有IO事件发生时,通过一个IO处理器来异步处理这些事件,当处理完成后,通知应用程序。...与Reactor模式不同的是,Proactor模式中,所有的IO操作都是异步的,包括读取和写入操作。Proactor模式的优点是可以避免复杂的回调处理逻辑,提高了代码的可读性和可维护性。...在Windows系统中,IOCP(IO Completion Port)是一种实现Proactor模式的高效方法。区别和联系总体来说,Reactor和Proactor都是用于处理异步IO操作的模式。...Proactor模式在Proactor模式中,所有的IO操作都是异步的,当有IO事件发生时,IO处理器会异步处理事件,并在处理完成后通知应用程序。...在这个例子中,Proactor模式通过异步IO操作来实现文件的读写,提高了文件传输的效率和可维护性。
在高性能的I/O设计中,有两个著名的模型:Reactor模型和Proactor模型,其中Reactor模型用于同步I/O,而Proactor模型运用于异步I/O操作。...Proactor模型 ?...这也是区别于Reactor的一点,Proactor中,应用程序需要传递缓存区。...Proactor中写入操作和读取操作,只不过感兴趣的事件是写入完成事件。...Proactor有如下缺点: 编程复杂性,由于异步操作流程的事件的初始化和事件完成在时间和空间上都是相互分离的,因此开发异步应用程序更加复杂。
在高性能的I/O设计中,有两个比较著名的模式Reactor和Proactor模式,其中Reactor模式用于同步I/O,而Proactor运用于异步I/O操作。...下面我们来看看Proactor模式中读取操作和写入操作的过程: 读取操作: 1....这也是区别于Reactor的一点,Proactor中,应用程序需要传递缓存区。 4....Proactor中写入操作和读取操作,只不过感兴趣的事件是写入完成事件。...从上面可以看出,Reactor和Proactor模式的主要区别就是真正的读取和写入操作是有谁来完成的,Reactor中需要应用程序自己读取或者写入数据,而Proactor模式中,应用程序不需要进行实际的读写过程
这次就来图解 Reactor 和 Proactor 这两个高性能网络模式。...---- Proactor 前面提到的 Reactor 是非阻塞同步网络模式,而 Proactor 是异步网络模式。 这里先给大家复习下阻塞、非阻塞、同步、异步 I/O 的概念。...Proactor 正是采用了异步 I/O 技术,所以被称为异步网络模型。 现在我们再来理解 Reactor 和 Proactor 的区别,就比较清晰了。...接下来,一起看看 Proactor 模式的示意图: ?...介绍一下 Proactor 模式的工作流程: Proactor Initiator 负责创建 Proactor 和 Handler 对象,并将 Proactor 和 Handler 都通过 Asynchronous
引言 Reactor 与 Proactor 模型是近几年技术领域频频提到的两个设计模式,那么,究竟什么是 Reator,什么又是 Proactor,他们之间有什么异同呢? 本文就来详细介绍一下。...Proactor 模式 Proactor 模式是另一个消息异步通知的设计模式,与 Reactor 的最大区别在于,Proactor 通知的不是就绪事件,而是操作完成事件,这也就是操作系统异步 IO 的主要模型...Proactor 的优势与不足 此前我们介绍了 glibc 实现的 POSIX aio 与 linux 原生实现的 libaio,他们是典型的 Proactor 模式的处理模型: POSIX AIO —...优势 Proactor 最显著的优势在于处理耗时长的 IO 操作和并发场景。...https://en.wikipedia.org/wiki/Proactor\_pattern。
如果把 I/O 操作改为异步,即交给操作系统来完成就能进一步提升性能,这就是异步网络模型 Proactor。 ?...Proactor 是和异步 I/O 相关的,详细方案如下: 1)Proactor Initiator 创建 Proactor 和 Handler 对象,并将 Proactor 和 Handler 都通过...; 4)Proactor 根据不同的事件类型回调不同的 Handler 进行业务处理; 5)Handler 完成业务处理。...可以看出 Proactor 和 Reactor 的区别: 1)Reactor 是在事件发生时就通知事先注册的事件(读写在应用程序线程中处理完成); 2)Proactor 是在事件发生时基于异步 I/...但是Proactor有如下缺点: 1)编程复杂性,由于异步操作流程的事件的初始化和事件完成在时间和空间上都是相互分离的,因此开发异步应用程序更加复杂。
接下来我们可以来了解下IO事件驱动设计的异步实现原理,即Proactor模式实现 Proactor设计原理 在IO事件驱动设计实现,还有另一种实现模式,即Proactor模式,以网络AIO模型为基础,...Proactor运作流程 通过上述的AIO模型分析,我们可以类比Proactor与Reactor实现模式,对于Proactor模式而言,只是使用的IO策略不同,因而在设计的实现细节也会有所不同,可以通过...Proactor组件具体实现 Proactor组件运作流程 ?...并注册一个处理Accept的完成事件的Handler Proactor proactor = new Proactor(server, processor, new Acceptor(server...Reactor模式是等待就绪事件发生然后依次顺序处理就绪事件,Proactor模式是等待就绪事件完成处理完成之后 Reactor&Proactor使用库 ACE框架: 提供Reactor以及Proactor
异步IO模型使用了Proactor设计模式实现了这一机制。 ?...图6 Proactor设计模式 如图6,Proactor模式和Reactor模式在结构上比较相似,不过在用户(Client)使用方式上差别较大。...,然后将CompletionHandler与IO操作的结果数据一起转发给Proactor,Proactor负责回调每一个异步操作的事件完成处理函数handle_event。...虽然Proactor模式中每个异步操作都可以绑定一个Proactor对象,但是一般在操作系统中,Proactor被实现为Singleton模式,以便于集中化分发操作完成事件。 ?...最后内核将read的数据和用户线程注册的CompletionHandler分发给内部Proactor,Proactor将IO完成的信息通知给用户线程(一般通过调用用户线程注册的完成事件处理函数),完成异步
【翻译】两种高性能I/O设计模式(Reactor/Proactor)的比较 这是05年的老文章,网上应该有人早就翻译过了,我翻译它仅仅为了学习Reactor/Proactor两种TCP服务器设计模式,...涉及到事件分享器的两种模式称为:Reactor and Proactor [1]. Reactor模式是基于同步I/O的,而Proactor模式是和异步I/O相关的....举另外个例子来更好地理解Reactor与Proactor两种模式的区别。这里我们只关注read操作,因为write操作也是差不多的。...更好的解决方案 在文章这一段时,我们将尝试提供一种融合了Proactor和Reactor两种模式的解决方案....模式: 步骤 1) 等待事件 (Proactor 的工作) 步骤 2) 读数据(看,这里变成成了让 Proactor 做这个事情) 步骤 3) 把数据已经准备好的消息给用户处理函数,即事件处理者(
应用上区别 第二关 区别: 可以看出 Proactor 和 Reactor 的区别: 1)Reactor 是在事件发生时就通知事先注册的事件(读写在应用程序线程中处理完成); 2)Proactor 是在事件发生时基于异步...Reactor 可以理解为「来了事件操作系统通知应用进程,让应用进程来处理」, 而 Proactor 可以理解为「来了事件操作系统来处理,处理完再通知应用进程」 Proactor 正是采用了异步 I/O...Proactor 是异步网络模式, 感知的是已完成的读写事件。...接下来,一起看看 Proactor 模式的示意图: 可惜的是,在 Linux 下的异步 I/O 是不完善的 Proactor is a software design pattern for event..." event to user handler (Proactor job) Step 4) process data (user handler job) The Proactor Design Pattern
如果把 I/O 操作改为异步,即交给操作系统来完成就能进一步提升性能,这就是异步网络模型 Proactor。 ?...Proactor 是和异步 I/O 相关的,详细方案如下: 1)Proactor Initiator 创建 Proactor 和 Handler 对象,并将 Proactor 和 Handler 都通过...; 4)Proactor 根据不同的事件类型回调不同的 Handler 进行业务处理; 5)Handler 完成业务处理。...可以看出 Proactor 和 Reactor 的区别: 1)Reactor 是在事件发生时就通知事先注册的事件(读写在应用程序线程中处理完成); 2)Proactor 是在事件发生时基于异步 I/O...但是Proactor有如下缺点: 1)编程复杂性,由于异步操作流程的事件的初始化和事件完成在时间和空间上都是相互分离的,因此开发异步应用程序更加复杂。
涉及到事件分享器的两种模式称为:Reactor and Proactor 。 Reactor模式是基于同步I/O的,而Proactor模式是和异步I/O相关的。...Proactor模式 ? Proactor模式的类图如上图所示,Proactor模式又叫前摄器或主动器模式。...两者区别 主要区别: Reactor实现同步I/O多路分发,Proactor实现异步I/O分发。...所以涉及到文件I/O最好还是使用Proactor模式,或者用多线程模拟实现异步I/O的方式。 Reactor模式注册的是文件描述符的就绪事件,而Proactor模式注册的是完成事件。...下图是libeio的异步I/O实现,是不是很像Proactor模式啊。 ?
NIO高级主题 Proactor与Reactor 一般情况下,I/O 复用机制需要事件分发器(event dispatcher)。...涉及到事件分发器的两种模式称为:Reactor和Proactor。 Reactor模式是基于同步I/O的,而Proactor模式是和异步I/O相关的。...下面,我们将尝试应对为Proactor和Reactor模式建立可移植框架的挑战。...改进实现的模拟Proactor: 步骤1:等待事件到来(Proactor负责)。 步骤2:得到读就绪事件,执行读数据(现在由Proactor负责)。...步骤3:将读完成事件分发给用户处理器(Proactor负责)。 步骤4:处理数据(用户处理器负责)。
领取专属 10元无门槛券
手把手带您无忧上云