`
m635674608
  • 浏览: 5061488 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

reactor/proactor模型简介

    博客分类:
  • java
 
阅读更多

Reactor和preactor都是IO多路复用模式,一般地,I/O多路复用机制都依赖于一个事件多路分离器(Event Demultiplexer)。分离器对象可将来自事件源的I/O事件分离出来,并分发到对应的read/write事件处理器(Event Handler)。开发人员预先注册需要处理的事件及其事件处理器(或回调函数)。

Reactor模式采用同步IO,而Proactor采用异步IO。同步和异步是针对应用程序和内核的交互而言的,同步指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪,而异步是指用户进程触发IO操作以后便开始做自己的事情,而当IO操作已经完成的时候会得到IO完成的通知(异步的特点就是通知)。

而阻塞和非阻塞是针对于进程在访问数据的时候,根据IO操作的就绪状态来采取的不同方式,说白了是一种读取或者写入操作函数的实现方式,阻塞方式下读取或者写入函数将一直等待,而非阻塞方式下,读取或者写入函数会立即返回一个状态值。

同步阻塞:

在此种方式下,用户进程在发起一个IO操作以后,必须等待IO操作的完成,只有当真正完成了IO操作以后,用户进程才能运行。

同步非阻塞:

在此种方式下,用户进程发起一个IO操作以后边可返回做其它事情,但是用户进程需要时不时的询问IO操作是否就绪,这就要求用户进程不停的去询问,从而引入不必要的CPU资源浪费。

异步阻塞:

此种方式下是指应用发起一个IO操作以后,不等待内核IO操作的完成,等内核完成IO操作以后会通知应用程序,这其实就是同步和异步最关键的区别,同步必须等待或者主动的去询问IO是否完成,那么为什么说是阻塞的呢?因为此时(通知)是通过select系统调用来完成的,而select函数本身的实现方式是阻塞的,而采用select函数有个好处就是它可以同时监听多个文件句柄(就绪的没有就绪的都有监听,epoll是select的替代方式,只监听就绪的文件句柄),从而提高系统的并发性!

异步非阻塞:

在此种模式下,用户进程只需要发起一个IO操作然后立即返回,等IO操作真正的完成以后,应用程序会得到IO操作完成的通知,此时用户进程只需要对数据进行处理就好了,不需要进行实际的IO读写操作,因为真正的IO读取或者写入操作已经由内核完成了。

 

reactor

proactor

1. 应用程序注册读/写就绪事件和相关联的事件处理器

2. 事件分离器等待事件的发生 (Reactor负责)

3. 当发生读就绪事件的时候,事件分离器调用第一步注册的事件处理器(Reactor负责)

4. 事件处理器首先执行实际的读取操作,然后根据读取到的内容进行进一步的处理(用户处理器负责)

1. 应用程序初始化一个异步读取操作,然后注册相应的事件处理器,此时事件处理器不关注读取就绪事件,而是关注读取完成事件,这是区别于Reactor的关键

2. 事件分离器等待读取操作完成事件

3. 在事件分离器等待读取操作完成的时候,操作系统调用内核线程完成读取操作(异步IO都是操作系统负责将数据读写到应用传递进来的缓冲区供应用程序操作,操作系统扮演了重要角色),并将读取的内容放入用户传递过来的缓存区中。这也是区别于Reactor的一点,Proactor中,应用程序需要传递缓存区。

4. 事件分离器捕获到读取完成事件后,激活应用程序注册的事件处理器,事件处理器直接从缓存区读取数据,而不需要进行实际的读取操作。

与reactor相比,proactor显然系统调用更少。

从上面可以看出,Reactor和Proactor模式的主要区别就是真正的读取和写入操作是有谁来完成的,Reactor中需要应用程序自己读取或者写入数据,而Proactor模式中,应用程序不需要进行实际的读写过程,它只需要从缓存区读取或者写入即可,操作系统会读取缓存区或者写入缓存区到真正的IO设备.

 综上所述,同步和异步是相对于应用和内核的交互方式而言的,同步需要主动去询问,而异步的时候内核在IO事件发生的时候通知应用程序,而阻塞和非阻塞仅仅是系统在调用系统调用的时候函数的实现方式而已。

 

http://blog.csdn.net/liufeng_cp/article/details/7973201

分享到:
评论

相关推荐

    Proactor模式&Reactor模式详解

    根据数据传输方式的不同,通常将I/O模型分为四类:同步阻塞I/O、同步非阻塞I/O、I/O多路复用(Reactor模式)以及异步I/O(Proactor模式)。本文旨在详细介绍这些I/O模型,并着重解析Reactor模式与Proactor模式的设计...

    actor和proactor模式1

    在具体实现上,`Reactor`模式通常使用`select`、`poll`或`epoll`等I/O多路复用技术,而`Proactor`模式则依赖于系统级别的异步I/O支持,如Windows的IOCP,或者在Linux中可以使用AIO(Asynchronous I/O)库。...

    p401 - p418 proactor -Reactor模型

    Proactor-Reactor 模式详解 Proactor-Reactor 模式是高性能服务器设计的核心思想之一,它们都是基于 I/O 多路复用的技术实现的。下面我们来详细了解 Proactor-Reactor 模式的设计思想和实现机理。 问题背景 在...

    基于Linux环境下C++开发的轻量级Web服务器源码.zip

    它采用了线程池 + 非阻塞socket + epoll(ET和LT均实现) + 事件处理(Reactor和Proactor模型)的并发模型,使用状态机解析HTTP请求报文,支持GET和POST请求。此外,它还实现了访问数据库的web端用户注册和登录功能,同步/...

    两种高性能IO设计模式(ReactorProactor)的比较.docx

    Reactor和Proactor都是基于事件驱动的I/O模型,它们都利用事件分发器来管理多个I/O事件。Reactor模式适用于同步I/O,当事件分离器检测到文件描述符或socket可读写时,它将事件传递给预先注册的处理函数进行实际的...

    C和C++实现和封装不同的网络 IO 模型源码(如 epoll、reactor、io_uring 和 proactor).zip

    C和C++实现和封装不同的网络 IO 模型源码(如 epoll、reactor、io_uring 和 proactor).zip 【说明】 【1】项目代码完整且功能都验证ok,确保稳定可靠运行后才上传。欢迎下载使用!在使用过程中,如有问题或建议,请...

    Proactor和Reactor模式_继续并发系统设计的扫盲[参照].pdf

    首先,Reactor模式是一种同步I/O模型。在Reactor模式中,事件处理器(event handler)会声明对特定套接字的I/O事件感兴趣,比如读取准备就绪的事件。接着,事件分发器(event demultiplexer)等待这些事件的发生。...

    Java NIO:浅析I/O模型

    说起,然后接着阐述了阻塞和非阻塞的区别,接着介绍了阻塞IO和非阻塞IO的区别,然后介绍了同步IO和异步IO的区别,接下来介绍了5种IO模型,后介绍了两种和高性能IO设计相关的设计模式(Reactor和Proactor)。...

    ACE自适配通讯环境课件

    此外,ACE还包含了一些框架,如Reactor/Proactor模式,用于事件驱动编程;Service Configuration用于动态配置服务;Stream框架则支持流处理。 跨平台支持是ACE的一大特点,它能在众多操作系统上运行,包括各种...

    IO模型与性能分析

    - **Proactor模型**:关注点在于预知未来的I/O事件,通过异步操作来减少阻塞等待时间。 #### 六、多核环境下的性能优化 在多核计算环境下,如何有效地管理并发操作和资源共享变得尤为重要。例如,在分布式锁的竞争...

    Java NIO:浅析IO模型_动力节点Java学院整理

    本文将从同步和异步的概念开始,然后介绍阻塞和非阻塞的区别,接着介绍阻塞IO和非阻塞IO的区别,最后介绍五种IO模型和两种高性能IO设计相关的设计模式(Reactor和Proactor)。 一、同步和异步 同步和异步是IO模型...

    聊聊Netty那些事儿之从内核角度看IO模型.doc

    两种IO线程模型是Reactor模型和Proactor模型。Reactor模型是将IO操作和事件处理分离的模型,而Proactor模型是将IO操作和事件处理合并的模型。Netty中的Reactor模型是使用Reactor模型来实现的。 5. Netty中的Reactor...

    ACE Reactor相关的知识

    ACE Reactor 模型是 ACE (Adaptive Communication Environment) 库中的核心组件,它是一种事件驱动的编程模型,主要用于网络编程。Reactor 提供了一种高效的方法来处理多个并发的 I/O 事件,使得服务器能够有效地...

    Java工程师技能图谱.pdf

    3. IO模型和网络编程:IO模型包括BIO、NIO、AIO,以及Reactor/Proactor模式。网络编程方面需要理解NioEventLoopGroup/EventLoop、bossGroup/workerGroup、ByteBuff/Acceptor/Channel/Handler等核心基础类。 4. 网络...

    Apisix及OpenResty、Nginx的高并发探究.pptx

    在高并发架构中,常见的 IO 模型包括 Reactor 和 Proactor 模型,以及多路复用技术如 select、poll 和 epoll。Reactor 模型(如 Nginx 所采用)是事件驱动的,而 Proactor 模型(如 Netty)则是异步完成的。多路复用...

    从零学架构无评论版

    介绍 PPC、TPC、Reactor、Proactor 模型提升性能,以及负载均衡的分类与架构、算法与优缺点。 高可用架构模式:将介绍 CAP 原理的理解和应用、FMEA 分析方法;从主备、主从、主主、集群、分区详解常见的高可用存储...

    MMORPG架构.docx

    - **网络框架**:基于Reactor/Proactor/Actor模型构建。 - **消息编码**:定义统一的消息格式与协议。 - **同步/异步处理**:确保数据传输的可靠性和效率。 - **负载均衡**:合理分配请求到不同的服务器节点。 ####...

    Asynchronous IO with Boost.Asio - Michael Caisse - CppCon 2016.pdf

    Proactor模型是一种用于异步事件处理的架构,与Reactor模型相对。Proactor模型通过一个或多个异步操作服务进程来完成I/O操作,从而允许应用程序继续执行,直到操作完成时才接收事件通知。这种模型被证明在处理大量...

    C++从零开始搭建一个web服务器

    (1)使用 线程池 + 非阻塞socket + epoll(ET和LT均实现) + 事件处理(Reactor、Proactor) 的并发模型; (2)使用状态机解析HTTP请求报文,支持解析GET和POST请求; (3)访问服务器数据库实现web端用户注册、登录...

    CS编程的各种模型

    - **异步非阻塞服务器**(如Reactor模式):使用I/O复用技术,单线程或少量线程即可处理大量并发连接。 - **预读取服务器**(Proactor模式):利用异步I/O,提前发起I/O操作,处理其他任务,I/O完成后回调。 - **...

Global site tag (gtag.js) - Google Analytics