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

Java网络编程(四) Reactor和Proactor模式

 
阅读更多
      在高性能的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设备.
[/color]


参考:http://xmuzyq.iteye.com/blog/783218(高性能IO设计的Reactor和Proactor模式)
分享到:
评论

相关推荐

    高级网络编程经典课件

    5. **并发服务器设计**:探讨不同的服务器架构,如单线程、多线程、多进程以及事件驱动(如Reactor和Proactor模式)服务器,理解其优缺点和适用场景。 6. **HTTP协议**:作为互联网上最常用的协议,理解HTTP的工作...

    mldn学习笔记 — 网络编程

    多线程和异步I/O模型如Reactor和Proactor模式可以帮助提高系统的并发能力,减少资源消耗。 此外,网络编程还需要关注错误处理和安全性。例如,网络连接可能因各种原因中断,程序必须能够优雅地处理这些异常情况。...

    《网络编程》

    这可以通过多线程、多进程、异步IO或事件驱动(如Reactor和Proactor模式)等方式实现。 8. **错误处理与异常处理**:网络通信中,由于网络环境的不稳定,错误处理和异常处理至关重要。开发者需要编写健壮的代码来...

    Java高并发异步Socket编程

    Java中的java.io和java.nio包为网络编程提供了丰富的API,使得开发者可以根据具体需求灵活地选择合适的工具和模式来实现高性能的网络服务。通过了解和掌握这些知识,开发者可以构建出能够应对高并发场景的网络应用...

    scalable-io-in-java-中文.pdf

    - **其他变种**:根据具体应用场景,Reactor模式还可以进一步发展和变化,比如Proactor模式等。 4. **Java NIO非阻塞I/O APIs**:NIO提供了不同于BIO的I/O处理方式。NIO的关键组件包括Channels(通道)、Buffers...

    netty原理的讲解

    总而言之,Netty通过优化的NIO模型、Reactor模式和高度可定制的处理流程,为Java开发者提供了构建高性能网络应用的强大工具。学习Netty不仅需要理解IO流的演变,还需要掌握其独特的设计理念和实现机制。通过深入学习...

    C++多线程编程介绍,技巧及注意要点-Part_3.pptx

    进一步讨论,Proactor和Reactor模式是异步I/O的两种实现方式。同步I/O操作(如传统的阻塞I/O)是顺序等待的,而异步I/O则允许在等待期间执行其他任务。在Proactor模式下,操作系统负责完成I/O操作并触发回调,而在...

    ACE自适配通信环境中文技术文档.pdf

    此外,文档还提供了一系列的编程模式,如Reactor和Proactor模式,这些都是实现高效、可复用的网络通信系统的关键技术。文档的受众主要是那些有C++或Java背景知识,希望进一步学习和掌握高性能网络通信系统设计与开发...

    网络程序设计网络程序设计

    此外,异步I/O和事件驱动编程模型(如Reactor或Proactor模式)也是处理高并发场景的有效策略。 错误处理是任何网络程序的必要部分,因为网络环境充满了不可预测的因素,如网络中断、数据包丢失等。良好的错误处理...

    基于Java的实例源码-NIO网络框架 xSocket.zip

    - **线程模型**:xSocket可能采用Reactor模式或者Proactor模式,有效地管理了线程资源,提高系统效率。 - **事件驱动**:通过选择器监听通道事件,如连接请求、数据到达等,触发相应的处理器进行处理。 - **协议...

    Java工程师技能图谱.pdf

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

    网络游戏-游戏服务器远程共享系统及方法.zip

    多线程、多进程技术可以并行处理多个玩家请求,异步IO模型如Reactor和Proactor模式则能提高服务器的响应速度。 4. **数据存储**:游戏数据的持久化存储通常使用关系型数据库(如MySQL)或非关系型数据库(如MongoDB...

    万人五子棋

    万人同时在线意味着需要处理大量的并发连接,这通常采用多线程或多进程技术,或者使用异步IO模型如Reactor或Proactor模式。同时,为了保证数据传输的稳定性和实时性,可能需要用到TCP/IP协议栈以及心跳包、断线重连...

    Java NIO:浅析I/O模型

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

    Socket长连接demo

    6. **并发处理**:在服务器端,为了处理多个客户端的连接请求,通常会采用多线程、多进程或者异步非阻塞I/O模型(如Reactor、Proactor模式)来实现并发。 在"Socket长连接demo"这个项目中,可能包含了上述步骤的...

    游戏服务器

    5. **并发处理**:游戏服务器需要处理大量并发请求,这需要采用多线程、多进程或事件驱动(如Reactor和Proactor模式)等并发模型。对于高并发场景,还可以使用线程池来管理线程资源,避免频繁创建和销毁线程带来的...

    Scocket的服务器代码

    这可能涉及多线程、多进程,或者使用更高级的模型如Reactor模式或Proactor模式。 5. **错误处理**:任何网络通信都可能出现错误,如网络中断、超时、数据包丢失等,因此良好的错误处理机制至关重要。 6. **关闭...

    TCPServerTCPClient多线程

    本主题将深入探讨“TCPServerTCPClient多线程”这一技术,它是网络编程中的常见实践,用于实现高效的服务器和客户端通信。 首先,TCP是一种面向连接的、可靠的传输层协议。它通过三次握手建立连接,确保数据的可靠...

    ApacheMina典型例子分析参考.pdf

    Mina采用Java NIO的Reactor实现,模拟Proactor模式。在某些系统中,如Windows,Proactor可以直接利用原生的异步I/O机制,如IO Completion Ports(IOCP),但在其他不支持原生异步I/O的系统上,可以通过Reactor模拟...

Global site tag (gtag.js) - Google Analytics