在高性能的I/O设计中,有两个比较著名的模式Reactor和Proactor模式,其中Reactor模式用于同步I/O,而Proactor运用于异步I/O操作。
同步和异步
同步和异步是针对应用程序和内核的交互而言的,同步指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪,而异步是指用户进程触发IO操作以后便开始做自己的事情,而当IO操作已经完成的时候会得到IO完成的通知。
阻塞和非阻塞
阻塞方式下读取或者写入函数将一直等待,而非阻塞方式下,读取或者写入函数会立即返回一个状态值。
I/O模型可以分为:同步阻塞,同步非阻塞,异步阻塞,异步非阻塞IO
1.同步阻塞
用户进程在发起一个IO操作以后,必须等待IO操作的完成,只有当真正完成了IO操作以后,用户进程才能运行。JAVA传统的IO模型属于此种方式!
2.同步非阻塞
用户进程发起一个IO操作以后边可返回做其它事情,但是用户进程需要时不时的询问IO操作是否就绪,这就要求用户进程不停的去询问,从而引入不必要的CPU资源浪费。其中目前JAVA的NIO就属于同步非阻塞IO。
3.异步阻塞
此种方式下是指应用发起一个IO操作以后,不等待内核IO操作的完成,等内核完成IO操作以后会通知应用程序,这其实就是同步和异步最关键的区别,同步必须等待或者主动的去询问IO是否完成,那么为什么说是阻塞的呢?因为此时是通过select系统调用来完成的,而select函数本身的实现方式是阻塞的,而采用select函数有个好处就是它可以同时监听多个文件句柄,从而提高系统的并发性!
4.异步非阻塞
用户进程只需要发起一个IO操作然后立即返回,等IO操作真正的完成以后,应用程序会得到IO操作完成的通知,此时用户进程只需要对数据进行处理就好了,不需要进行实际的IO读写操作,因为真正的IO读取或者写入操作已经由内核完成了。目前Java中还没有支持此种IO模型。
综上所述,同步和异步是相对于应用和内核的交互方式而言的,同步 需要主动去询问,而异步的时候内核在IO事件发生的时候通知应用程序,而阻塞和非阻塞仅仅是系统在调用系统调用的时候函数的实现方式而已。
Reactor模式
很多地方叫反应器模式,并发系统常使用reactor模式,代替常用的多线程的处理方式,节省系统的资源,提高系统的吞吐量。
例如:在高并发的情况下
多线程的处理:为每个单独到来的请求,专门启动一条线程,这样的话造成系统的开销很大,并且在单核的机上,多线程并不能提高系统的性能,除非在有一些阻塞的情况发生。否则线程切换的开销会使处理的速度变慢。
Reactor模式的处理:服务器端启动一条单线程,用于轮询IO操作是否就绪,当有就绪的才进行相应的读写操作,这样的话就减少了服务器产生大量的线程,也不会出现线程之间的切换产生的性能消耗。(目前JAVA的NIO就采用的此种模式,这里引申出一个问题:在多核情况下NIO的扩展问题)
以上两种处理方式都是基于同步的,多线程的处理是我们传统模式下对高并发的处理方式,Reactor模式的处理是现今面对高并发和高性能一种主流的处理方式。
Proactor模式
运用于异步I/O操作,Proactor模式中,应用程序不需要进行实际的读写过程,它只需要从缓存区读取或者写入即可,操作系统会读取缓存区或者写入缓存区到真正的IO设备.
- 浏览: 8658 次
相关推荐
"Reactor 和 Proactor 模式在网络编程中的应用" Reactor 和 Proactor 模式是两种常见的事件处理模式,在网络编程中广泛应用于设计高效、可靠的并发和网络应用程序。在本文中,我们将详细介绍 Reactor 和 Proactor ...
本人学习ACE 时候写的关于两种通信方式的实例代码,我把三个连写都写在了一个文件,根据需要注释掉其他的就行。 ACE用于开发通信程序非常方便,尤其相对于WinSock 来说,可以省很多代码,普通程序员也更容易理解
`Proactor`模式是一种异步I/O处理模式,与传统的`Reactor`模式(同步I/O)相对。在`Reactor`模式中,I/O操作完成后,事件多路分离器会通知处理器,然后处理器执行实际的读写操作。而在`Proactor`模式中,处理器发起...
本文旨在详细介绍这些I/O模型,并着重解析Reactor模式与Proactor模式的设计思想及其应用场景。 #### 二、同步阻塞I/O (Blocking I/O) 同步阻塞I/O是最基本且最直观的I/O处理方式。在这种模式下,应用程序发出I/O...
Proactor-Reactor 模式详解 Proactor-Reactor 模式是高性能服务器设计的核心思想之一,它们都是基于 I/O 多路复用的技术实现的。下面我们来详细了解 Proactor-Reactor 模式的设计思想和实现机理。 问题背景 在...
C和C++实现和封装不同的网络 IO 模型源码(如 epoll、reactor、io_uring 和 proactor).zip 【说明】 【1】项目代码完整且功能都验证ok,确保稳定可靠运行后才上传。欢迎下载使用!在使用过程中,如有问题或建议,请...
在并发系统设计中,Proactor和Reactor模式是两种常用的设计模式,它们主要用来处理I/O操作的事件派发和分离。这两种模式都是为了提高系统的并发能力,优化资源利用,但它们在处理I/O事件的方式上有所不同。 首先,...
两种高性能IO设计模式(Reactor和Proactor)比较 在高性能服务器设计中,I/O设计模式扮演着至关重要的角色。常见的I/O设计模式有阻塞型、非阻塞同步型和非阻塞异步型。其中,非阻塞异步型I/O设计模式是性能最高、...
使用线程池、非阻塞socket、epoll(ET和LT)、事件处理(Reactor和Proactor)的并发模型 使用状态机解析HTTP请求报文,支持GET和POST请求 实现web端用户注册和登录功能,可以请求服务器图片和视频文件 实现同步/异步日志...
《两种高性能IO设计模式(Reactor/Proactor)的比较》 在构建高性能TCP服务器时,I/O设计模式的选择至关重要,因为它们直接影响系统的性能和可扩展性。本文主要对比了两种主要的I/O多路复用模式:Reactor和Proactor...
Proactor模式与Reactor模式类似,也是事件驱动的,但其主要区别在于它是异步操作的。在Proactor模式中,I/O操作不是由事件处理器直接完成,而是由操作系统在后台异步执行,完成后通过回调函数通知处理器。这样,...
分析常见高性能网络设计模式,涵盖了reactor, proactor。
Proactor模式则是在异步I/O操作中的一种设计模式,与Reactor模式相比,它更加强调非阻塞I/O的处理。在Proactor模式中,I/O操作是异步启动的,完成后由操作系统通知,然后执行后续处理。这种模式在处理大量I/O操作时...
Reactor 负责维护事件处理器与事件类型的关联,并在事件发生时调用相应的 "handle_" 方法。 使用 ACE Reactor 的基本步骤包括: 1. 创建事件处理器子类,继承自 ACE_Event_Handler,实现对应事件的 "handle_" 方法...
- **主要内容**:涵盖ACE的基本概念、环境搭建过程以及Reactor、Proactor与Task三种主要框架的应用与实践。 #### 2. ACE简介及环境搭建 - **ACE简介**: - ACE(Adaptive Communication Environment,自适应通信...
高并发编程会有一些服务器模型,例如reactor或proactor。这两类都要使用到IO多路复用,O多路复用是指单个进程/线程就可以同时处理多个IO请求。有三个方式select、poll、epoll。 select:将文件描述符放入一个集合中...
本文将从同步和异步的概念开始,然后介绍阻塞和非阻塞的区别,接着介绍阻塞IO和非阻塞IO的区别,最后介绍五种IO模型和两种高性能IO设计相关的设计模式(Reactor和Proactor)。 一、同步和异步 同步和异步是IO模型...
介绍 PPC、TPC、Reactor、Proactor 模型提升性能,以及负载均衡的分类与架构、算法与优缺点。 高可用架构模式:将介绍 CAP 原理的理解和应用、FMEA 分析方法;从主备、主从、主主、集群、分区详解常见的高可用存储...