`

nio通信模型

    博客分类:
  • io
阅读更多

今天开始学习java并发编程,希望自己能有耐心.
先来看下阻塞io 和nio.

之前有了解过阻塞的io,以ServerSocket.accept()方法为例子,当socket的服务器端调用此方法时,会阻塞,一直等待客户端发起到服务器端的连接,知道有数据才进行返回,然后发起一个线程去进行处理,每个客户端过来,都会发起一个线程去处理.


client1-------       -------
client2-------server ------
.                                    n个处理程序
.
clientn-------       -------

如此,我们可以看到,对资源的耗费是肯定存在的,当客户端的程序大量出现时,服务端需要创建大量的处理程序,每个处理程序都需要耗费栈空间和cpu时间片.
同时阻塞带来的上下文切换是没有意义的.


对于nio,是非阻塞的,

client和server之间是管道channel, client有一个selector管理管道,server也有一个selector管理管道,selector可以向channel中注册事件,包括 读事件,写事件,客户端发起到服务端的连接事件,服务端接收客户端的请求事件,两端的处理程序会轮询selector,获取事件,进行相应的处理.

nio的原理:
1. 由一个专门的线程来处理所有的 IO 事件,并负责分发。
2. 事件驱动机制:事件到的时候触发,而不是同步的去监视事件。
3. 线程通讯:线程之间通过 wait,notify 等方式通讯。保证每次上下文切换都是有意义的。减少无谓的线程切换

分享到:
评论

相关推荐

    NIO 编程模型 - Reactor(java实现)(完整源码).zip

    2、适用人群:主要针对计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、数学、电子信息等)的同学或企业员工下载使用,具有较高的学习借鉴价值。 3、不仅适合小白学习实战练习,也...

    Java编程中的IO模型详解:BIO,NIO,AIO的区别与实际应用场景分析

    NIO是同步非阻塞模型,它借助selector能以一对多的方式处理连接,优点是连接数目较多且短的场景下效率较高,如聊天服务器,服务器间通信等,但编程相对复杂。AIO则是异步非阻塞模型,它由操作系统完成后回调通知...

    网络通信 netty_io

    1. BIO模型 源码 2. NIO模型 源码 3. AIO模型 源码 4. Netty 源码

    NIO框架Netty实现高性能高并发

    相比于传统基于Java序列化+BIO(同步阻塞IO)的通信框架,性能提升了8倍多。 事实上,我对这个数据并不感到惊讶,根据我5年多的NIO编程经验,通过选择合适的NIO框架,加上高性能的压缩二进制编解码技术,精 心的设计...

    高清Netty5.0架构剖析和源码解读

    传统BIO通信的弊端 在JDK 1.4推出JAVANIO1.0之前,基于JAVA 的所有Socket通信都采用 BIO 了同步阻塞模式( ),这种一请求一应答的通信模型简化了上层的应用开发, 但是在可靠性和性能方面存在巨大的弊端。...

    简单了解Java Netty Reactor三种线程模型

    Reactor单线程模型,指的是所有的IO操作都在同一个NIO线程上面完成,NIO线程的职责如下: 1)作为NIO服务端,接收客户端的TCP连接; 2)作为NIO客户端,向服务端发起TCP连接; 3)读取通信对端的请求或者应答消息;...

    Netty初探:掌握高性能网络通信框架,提升Java网络编程技能

    Netty是一个高性能、异步的网络通信框架,它解决了JDK自带的NIO API使用复杂的问题,提供了更高的性能和更低的延迟。Netty广泛应用于互联网行业、游戏行业和大数据领域,如阿里的Dubbo和RocketMQ等都使用了Netty作为...

    基于事件驱动和异步通信体系结构的Web服务器设计

    在设计支持高并发请求的服务器的软件时... 4 NIO和编程模型之间插入一个基于事件驱动模型的异步Socket 通信适配子层aSocket , 以封装和屏蔽底层细节,实现了一个参考Web 代理服务器,并与常见的代理服务器进行了性能比较.

    mina高性能Java网络框架.rar

    1.默认使用的是JAVA NIO 作为底层支持)操作的编程模型 2.主要屏蔽了网络通信的细节,对socket进行封装,并且是nio的一个实现框架,可以帮助我们快速的进行网络通信、游戏、中间价服务的开发。 3.Mina 的API 将...

    JAVA版基于netty的物联网高并发智能网关.rar

    java 1.4起,jdk支持了NIO(NEW IO),因NIO(os nonblocking)的非阻塞式工作方式,让应用服务器可以极大的优化线程模型,相比传统的阻塞式IO线程和链路一对一的模式,NIO只需少量的线程即可处理所有的链路,这对广大的...

    apr库(tomcat优化)

    tomcat自带还有NIO的模型,另外也可以调用APR的库来实现操作系统级别控制。 NIO模型是内置的,调用很方便,只需要将上面配置文件中protocol修改成org.apache.coyote.http11.Http11NioProtocol,重启即可生效。上面...

    apr库(tomcat优化) for native 20

    tomcat自带还有NIO的模型,另外也可以调用APR的库来实现操作系统级别控制。 NIO模型是内置的,调用很方便,只需要将上面配置文件中protocol修改成org.apache.coyote.http11.Http11NioProtocol,重启即可生效。上面...

    基于javatcpsocket通信的拆包和装包源码-Netty-practice:Netty学习实践

    M:N形式的同步阻塞IO通信模型 非阻塞式IO模型(NIO) NIO+单线程Reactor模型 NIO+多线程Reactor模型 NIO+主从多线程Reactor模型 总结 阻塞IO和非阻塞IO的区别就在于:应用程序的调用(等待数据准备阶段)是否立即返回! ...

    协议socket通讯JAVA Spring Boot对接.rar

    而网络通信的本质是网络间的数据 IO,这又牵扯出了 BIO 和 NIO这两个通讯模型: 2. IO通讯模型 只要有 IO,就会有阻塞或非阻塞的问题,无论这个 IO 是网络的,还是硬盘的。原因在于程序是运行在系统之上的,任何...

    apache mina socket实例

    mina简单示例,Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信...Mina 提供了事件驱动、异步(Mina 的异步IO 默认使用的是JAVA NIO 作为底层支持)操作的编程模型。

    Netty高性能网络应用框架.rar

    在学习Netty之前,我们需要对IO模型要有一定的了解,其中最重要的就是NIO,所以今天打算先对NIO进行一些简单的梳理。 IO模型 常见IO模型分为几种: BIO :Blocking IO, 即同步阻塞式IO。Client和Server的每建立一次...

    Apache Mina Server 2.0 参考手册

    Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用,Mina 提供了事件驱动、异步(Mina 的异步IO 默认使用的是JAVA NIO 作为底层支持)操作的编程模型。 Mina 主要有1.x 和2.x 两个分支,这里我们讲解最新...

    HP-Socket下载

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口...

    gRPC线程模型分析

    在JDK1.4推出JavaNIO之前,基于Java的所有Socket通信都采用了同步阻塞模式(BIO),这种一请求一应答的通信模型简化了上层的应用开发,但是在性能和可靠性方面却存在着巨大的瓶颈。因此,在很长一段时间里,大型的...

    mina中文开发手册.pdf

    Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP ...步(Mina 的异步IO 默认使用的是JAVA NIO 作为底层支持)操作的编程模型。 Mina 主要有1.x 和2.x 两个分支…………

Global site tag (gtag.js) - Google Analytics