首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java NIO浅析

NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到大型应用服务器,成为解决高并发与大量连接、...那么NIO的本质是什么样的呢?它是怎样与事件模型结合来解放线程、提高系统吞吐的呢?...涉及到事件分发器的两种模式称为:Reactor和Proactor。 Reactor模式是基于同步I/O的,而Proactor模式是和异步I/O相关的。...而在Proactor模式中,事件处理者(或者代由事件分发器发起)直接发起一个异步读写操作(相当于请求),而实际的工作是由操作系统来完成的。...如我们所见,通过对多路I/O模式功能结构的改造,可将Reactor转化为Proactor模式。改造前后,模型实际完成的工作量没有增加,只不过参与者间对工作职责稍加调换。

1.2K90
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java NIO浅析

    NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到大型应用服务器,成为解决高并发与大量连接、...那么NIO的本质是什么样的呢?它是怎样与事件模型结合来解放线程、提高系统吞吐的呢?...涉及到事件分发器的两种模式称为:Reactor和Proactor。 Reactor模式是基于同步I/O的,而Proactor模式是和异步I/O相关的。...而在Proactor模式中,事件处理者(或者代由事件分发器发起)直接发起一个异步读写操作(相当于请求),而实际的工作是由操作系统来完成的。...如我们所见,通过对多路I/O模式功能结构的改造,可将Reactor转化为Proactor模式。改造前后,模型实际完成的工作量没有增加,只不过参与者间对工作职责稍加调换。

    53740

    简单谈谈BIO,NIO,AIO

    BIO 与 NIO 一个比较重要的不同是, 我们使用 BIO 的时候往往会引入多线程,每个连接对应一个单独的线程;而 NIO 则是 使用单线程或者只使用少量的多线程,让连接共用一个线程。...(3)AIO 也就是 NIO 2,在 Java 7 中引入了 NIO 的改进版 NIO 2,它是异步非阻塞的IO 模型。...异步非阻塞 IO(AIO) (1)AIO 也就是 NIO 2,在 Java 7 中引入了 NIO 的改进版 NIO 2,它是异步非阻塞 的 IO 模型。...(2)Java 的 AIO API 其实就是 Proactor 模式的应用,和 Reactor 模式类似。...Reactor 和 Proactor 模式的主要区别就是真正的读取和写入操作是有谁来完成的, Reactor 中需要应用程序自己读取或者写入数据,而 Proactor 模式中,应用程序不需 要进行实际的读写过程

    28350

    JAVA高性能IO设计模式

    Java中的IO方式 主要分为3种:BIO(同步阻塞)、NIO(同步非阻塞)和AIO(异步非阻塞)。 ? BIO 同步阻塞模式。...NIO BIO模式中,是“一个Socket一个线程”;而在NIO中则是使用单个或少量的线程来轮询Socket,当发现Socket上有请求时,才为请求分配线程。因此是“一个请求一个线程”。...Boost库中的asio就使用了Proactor模式,其底层的异步I/O由操作系统提供,而异步事件的分发还是由epoll/kequeue/select等实现。...在Proactor模式中,事件处理者(或者代由事件分离者发起)直接发起一个异步读写操作(相当于请求),而实际的工作是由操作系统来完成的。...所以涉及到文件I/O最好还是使用Proactor模式,或者用多线程模拟实现异步I/O的方式。 Reactor模式注册的是文件描述符的就绪事件,而Proactor模式注册的是完成事件。

    89120

    彻底搞懂 netty 线程模型

    线程模型,先了解下NIO和AIO、reactor和proactor模型,这样理解netty线程模型和IO模型更轻松。...reactor和proactor模型 reactor:基于NIO技术,可读可写时通知应用; proactor:基于AIO技术,读完成时通知应用,写操作应用通知内核。...Reactor多线程模型 Rector 多线程模型与单线程模型最大的区别就是有一组 NIO 线程来处理连接读写操作,一个NIO线程处理Accept。...再回到刚才提出的问题,java中多线程来监听同一个对外端口,epoll方法是线程安全的,这样就可以使用使用多线程监听epoll_wait了么,当然是不建议这样干的,除了epoll的惊群问题之外,还有一个就是...,这样的话,多线程epoll_wait时就会导致第一个线程epoll_wait之后还未处理完毕已发生的事件时,第二个线程也会epoll_wait返回,显然这不是我们想要的,关于java nio的测试demo

    1.3K20

    Java NIO:浅析IO模型

    也许很多朋友在学习NIO的时候都会感觉有点吃力,对里面的很多概念都感觉不是那么明朗。在进入Java NIO编程之前,我们今天先来讨论一些比较基础的知识:I/O模型。...3.多路复用IO模型   多路复用IO模型是目前使用得比较多的模型。Java NIO实际上就是多路复用IO。   ...六.两种高性能IO设计模式   在传统的网络服务设计模式中,有两种比较经典的模式:   一种是 多线程,一种是线程池。   ...从这里可以看出,上面的五种IO模型中的多路复用IO就是采用Reactor模式。注意,上面的图中展示的 是顺序处理每个事件,当然为了提高事件处理速度,可以通过多线程或者线程池的方式来处理事件。   ...在Proactor模式中,当检测到有事件发生时,会新起一个异步操作,然后交由内核线程去处理,当内核线程完成IO操作之后,发送一个通知告知操作已完成,可以得知,异步IO模型采用的就是Proactor模式。

    69080

    Java IO模型详解:BIO、NIO和AIO

    在Java中,IO(输入/输出)操作是核心组成部分,尤其是在网络编程和文件操作中。随着Java的发展,IO模型也在不断进化,以适应不同的应用场景和性能需求。...本文将详细介绍Java中的三种主要IO模型:阻塞IO(BIO)、非阻塞IO(NIO)和异步非阻塞IO(AIO)。...异步非阻塞IO (AIO):在Java 7中引入,也称为NIO 2,基于事件和回调机制,实现了异步IO操作。阻塞IO (BIO)BIO模型在JDK 1.4之前是网络编程的标准。...异步非阻塞IO (AIO)AIO模型在Java 7中作为NIO的改进版被引入,它是基于事件和回调机制的异步IO模型。...AIO的实现是基于Proactor模式,与Reactor模式相比,Proactor模式中操作系统负责处理实际的读写操作,而应用程序只需从缓冲区读取或写入数据。总结每种IO模型都有其适用的场景。

    73510

    IO事件驱动设计实现

    服务端读取事件流程 -- 响应IO事件流程 在先前的Unix的IO模型中,真正进行IO操作的是调用recvfrom方法产生阻塞,对于非阻塞IO是当内核真正接收到可操作的IO事件时候才发起recvfrom...是通用的,这里不使用java的NIO实现,仅用java伪代码实现 class Reactor { // 事件通道,在Java中是使用SelectionKey保存每个socket事件 private...接下来我们可以来了解下IO事件驱动设计的异步实现原理,即Proactor模式实现 Proactor设计原理 在IO事件驱动设计实现,还有另一种实现模式,即Proactor模式,以网络AIO模型为基础,...Proactor运作流程 通过上述的AIO模型分析,我们可以类比Proactor与Reactor实现模式,对于Proactor模式而言,只是使用的IO策略不同,因而在设计的实现细节也会有所不同,可以通过...最后关于Java相关NIO的API: https://docs.oracle.com/javase/7/docs/api/java/nio/package-summary.html https://www.ibm.com

    1.1K30

    socket&io高性能

    1上阻塞2上也阻塞的是同步阻塞IO;1上非阻塞2阻塞的是同步非阻塞IO,NIO,Reactor就是这种模型;1上非阻塞2上非阻塞是异步非阻塞IO,AIO,Proactor就是这种模型。...•I/O 模型:阻塞、非阻塞、同步、异步•进程模型:单进程、多进程、多线程 传统模式PPC&TPC PPC,即Process Per Connection,为每个连接都创建一个进程去处理。...Reactor 单进程的是 Redis 在redis中如果value比较大,redis的QPS会下降得很厉害,有时一个大key就可以拖垮 现在redis6.0版本后,已经变成多线程模型,对于大value...以 Java 的 NIO 为例,Selector 是线程安全的,但是通过 Selector.selectKeys() 返回的键的集合是非线程安全的,对 selected keys 的处理必须单线程处理或者采取同步措施进行保护...•Reactor 承担所有事件的监听和响应,只在主线程中运行,瞬间高并发时会成为性能瓶颈 多Reactor多线程 为了解决单 Reactor 多线程的问题,最直观的方法就是将单Reactor改为多Reactor

    98830

    Netty网络编程第六卷

    Reactor 单线程 单 Reactor 多线程 主从 Reactor 多线程 小结 线程模型3:Proactor 模型 Netty线程模型 【异步处理】: Netty框架的架构设计 功能特性...java的典型实现是nio设置sockchannel为非阻塞模式,相当于在bio的基础上设置操作为非阻塞 I/O模型3:I/O 复用模型(I/O multiplexing) 在 I/O 复用模型中...上面说的可以联系java的nio里面的selector.select()方法 比喻:放了一堆鱼竿,在岸边一直守着这堆鱼竿,没鱼上钩就玩手机。...线程模型3:Proactor 模型 在 Reactor 模式中,Reactor 等待某个事件或者可应用或者操作的状态发生(比如文件描述符可读写,或者是 Socket 可读写)。...这里引用 Doug Lee 大神的 Reactor 介绍——Scalable IO in Java 里面关于主从 Reactor 多线程模型的图: 特别说明的是:虽然 Netty 的线程模型基于主从

    37320

    面试被问:你会性能调优吗?

    Java虚拟机底层原理与性能优化 1、Java虚拟机内存模型能说说吗? 2、类加载器的双亲委派模型是什么? 3、JVM垃圾收集算法与收集器有哪些? 4、JVM诊断调优工具用过哪些?...4、联合索引底层数据结构又是怎样的? 5、覆盖索引与聚集索引到底是什么? 6、Mysql最左前缀优化原则是什么? 7、为什么推荐使用自增主键做索引? 8、说说Mysql索引优化规范?...BIO,NIO,AIO,Netty以及Redis线程模型 1、BIO,NIO,AIO的区别? 2、什么是阻塞IO以及非阻塞IO? 3、什么是同步IO以及异步IO? 4、IO模型有几种?...分别是什么? 5、Reactor和Proactor IO设计模式是什么? 6、NIO底层select、poll和epoll实现的区别 ? 7、Java NIO的几个核心组成部分是什么?...作用分别是什么? 8、Redis、Netty、Tomcat的线程模型与NIO的联系是什么? 一篇文章,难以说完。

    95462

    Java NIO:浅析IO模型

    也许很多朋友在学习NIO的时候都会感觉有点吃力,对里面的很多概念都感觉不是那么明朗。在进入Java NIO编程之前,我们今天先来讨论一些比较基础的知识:I/O模型。...3.多路复用IO模型   多路复用IO模型是目前使用得比较多的模型。Java NIO实际上就是多路复用IO。   ...在Java NIO中,是通过selector.select()去查询每个通道是否有到达事件,如果没有事件,则一直阻塞在那里,因此这种方式会导致用户线程的阻塞。   ...六.两种高性能IO设计模式   在传统的网络服务设计模式中,有两种比较经典的模式:   一种是 多线程,一种是线程池。   ...在Proactor模式中,当检测到有事件发生时,会新起一个异步操作,然后交由内核线程去处理,当内核线程完成IO操作之后,发送一个通知告知操作已完成,可以得知,异步IO模型采用的就是Proactor模式。

    31310

    IO你了解了,NIO你会吗?

    在进入Java NIO编程之前,我们今天先来讨论一些比较基础的知识:I/O模型。...3.多路复用IO模型   多路复用IO模型是目前使用得比较多的模型。Java NIO实际上就是多路复用IO。   ...在Java NIO中,是通过selector.select()去查询每个通道是否有到达事件,如果没有事件,则一直阻塞在那里,因此这种方式会导致用户线程的阻塞。   ...六.两种高性能IO设计模式   在传统的网络服务设计模式中,有两种比较经典的模式:   一种是 多线程,一种是线程池。   ...在Proactor模式中,当检测到有事件发生时,会新起一个异步操作,然后交由内核线程去处理,当内核线程完成IO操作之后,发送一个通知告知操作已完成,可以得知,异步IO模型采用的就是Proactor模式。

    45740

    Java NIO:浅析IO模型

    也许很多朋友在学习NIO的时候都会感觉有点吃力,对里面的很多概念都感觉不是那么明朗。在进入Java NIO编程之前,我们今天先来讨论一些比较基础的知识:I/O模型。...多路复用IO模型是目前使用得比较多的模型。Java NIO实际上就是多路复用IO。   ...在Java NIO中,是通过selector.select()去查询每个通道是否有到达事件,如果没有事件,则一直阻塞在那里,因此这种方式会导致用户线程的阻塞。   ...六.两种高性能IO设计模式   在传统的网络服务设计模式中,有两种比较经典的模式:   一种是 多线程,一种是线程池。   ...在Proactor模式中,当检测到有事件发生时,会新起一个异步操作,然后交由内核线程去处理,当内核线程完成IO操作之后,发送一个通知告知操作已完成,可以得知,异步IO模型采用的就是Proactor模式。

    20900

    Java NIO之理解IO模型(二)

    多线程模型可以方便高效的解决小规模的服务请求,但面对大规模的服务请求,多线程模型也会遇到瓶颈,可以用非阻塞接口来尝试解决这个问题。...Java中的NIO实际上就是使用的多路IO复用模型,通过selector.select()去查询每个通道是否有到达事件,如果没有事件,则一直阻塞在那里,因此多路复用IO模型也会阻塞用户线程,只不过线程是被...异步IO是需要操作系统底层支持的,Linux从内核2.6版本才开始支持异步IO。在Java 7中就已经支持异步IO了。...从这个设计模式的处理过程中可以看出,多路IO复用模型就是使用的 Reactor模式,并且这种设计模式还是体现的同步IO。...Proactor模式 Proactor的意思是主动器,主动去完成相应的工作不影响主流程。

    47240

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券