java NIO 模型(一)

1. 阻塞I/O通信模型

1.性能:一连接一线程模型导致服务端的并发接入数和系统吞吐量受到极大限制

2.可靠性:由于IO操作采用同步阻塞模式,当网络拥塞或者逻辑处理缓慢会导致IO线程被挂住,阻塞时间无法预测

3.可维护性:IO线程数无法有效控制、资源无法有效共享(多线程并发问题),系统可维护性差

2. 异步、非阻塞、基于事件驱动的NIO框架

3.selector作用

4.三个概念

Multiplexed, non-blocking I/O, which is much more scalable than thread-oriented, blocking I/O, is provided by selectorsselectable channels,

and selection keys.

selector is a multiplexor of selectable channels, which in turn are a special type of channel that can be put into non-blocking mode.

To perform multiplexed I/O operations, one or more selectable channels are first created, put into non-blocking mode, and registered with

a selector. Registering a channel specifies the set of I/O operations that will be tested for readiness by the selector, and returns a selection

key that represents the registration.

Once some channels have been registered with a selector, a selection operation can be performed in order to discover which channels, if

any, have become ready to perform one or more of the operations in which interest was previously declared. If a channel is ready then the

key returned when it was registered will be added to the selector‘s selected-key set. The key set, and the keys within it, can be examined

in order to determine the operations for which each channel is ready. From each key one can retrieve the corresponding channel in order to

perform whatever I/O operations are required.

That a selection key indicates that its channel is ready for some operation is a hint, but not a guarantee, that such an operation can be

performed by a thread without causing the thread to block. It is imperative that code that performs multiplexed I/O be written so as to

ignore these hints when they prove to be incorrect.

5.线程安全

Selection keys are safe for use by multiple concurrent threads. The operations of reading and writing the interest set will, in general, be

synchronized with certain operations of the selector. Exactly how this synchronization is performed is implementation-dependent:

In a naive implementation, reading or writing the interest set may block indefinitely if a selection operation is already in progress;

in a high-performance implementation, reading or writing the interest set may block briefly, if at all.

In any case, a selection operation will always use the interest-set value that was current at the moment that the operation began.

时间: 2024-11-15 19:37:06

java NIO 模型(一)的相关文章

Linux IO模型与Java NIO

概述看Java NIO一篇文章的时候又看到了"异步非阻塞"这个概念,一直处于似懂非懂的状态,想解释下到底什么是异步 什么是非阻塞,感觉抓不住重点.决定仔细研究一下.本文试图研究以下问题: web server原理,bio的connector与nio的connector在架构上到底什么区别? NIO的优势到底在哪里,是如何应用到实践中的? 同步/异步.阻塞/非阻塞到底是什么概念,引出的IO模型同步阻塞.同步非阻塞.异步阻塞.异步非阻塞的具体使用场景,适用的场景是怎样的? bio nio也

Java NIO:浅析I/O模型

原文:http://www.cnblogs.com/dolphin0520/p/3916526.html 在进入Java NIO编程之前,先讨论一些比较基础的知识:I/O模型.下面先从同步和异步的概念说起,然后接着阐述了阻塞和非阻塞的区别,接着介绍了阻塞IO和非阻塞IO的区别,然后介绍了同步IO和异步IO的区别,接下来介绍了5种IO模型,最后 介绍了两种和高性能IO设计相关的设计模式(Reactor和Proactor). 一.什么是同步?什么是异步? 同步和异步的概念出来已经很久了,网上有关同步

Java NIO 与 基于reactor设计模式的事件处理模型

Java NIO非堵塞应用通常适用用在I/O读写等方面,我们知道,系统运行的性能瓶颈通常在I/O读写,包括对端口和文件的操作上,过去,在打开一个I/O通道后,read()将一直等待在端口一边读取字节内容,如果没有内容进来,read()也是傻傻的等,这会影响我们程序继续做其他事情,那么改进做法就是开设线程,让线程去等待,但是这样做也是相当耗费资源的. Java NIO非堵塞技术实际是采取Reactor模式,或者说是Observer模式为我们监察I/O端口,如果有内容进来,会自动通知我们,这样,我们

Java IO模型&NIO

Java IO模型&NIO Java IO模型NIO 楔子 概述 网络服务 经典的服务设计 经典的SocketServer循环阻塞 可伸缩目标 分而治之 事件驱动设计 背景知识AWT 事件 Reactor 模式 Reactor基础模式 Java NIO 支持 Channels Buffers Selectors SelectionKeys Reactor 模式实践 第一步初始化 第二步循环分发 第三步接收者 第四步 Handler设置 第五步请求处理 还有一种状态Handler 多线程版本Rea

Java NIO:浅析I/O模型(转)

原文链接:http://www.cnblogs.com/dolphin0520/p/3916526.html 以下是本文的目录大纲: 一.什么是同步?什么是异步? 二.什么是阻塞?什么是非阻塞? 三.什么是阻塞IO?什么是非阻塞IO? 四.什么是同步IO?什么是异步IO? 五.五种IO模型 六.两种高性能IO设计模式 一.什么是同步?什么是异步? 同步和异步的概念出来已经很久了,网上有关同步和异步的说法也有很多.以下是我个人的理解: 同步就是:如果有多个任务或者事件要发生,这些任务或者事件必须逐

从底层入手,图解 Java NIO BIO MIO AIO 四大IO模型与原理

目录 写在前面 1.1. Java IO读写原理 1.1.1. 内核缓冲与进程缓冲区 1.1.2. java IO读写的底层流程 1.2. 四种主要的IO模型 1.3. 同步阻塞IO(Blocking IO) 1.4. 同步非阻塞NIO(None Blocking IO) 1.5. IO多路复用模型(I/O multiplexing) 1.6. 异步IO模型(asynchronous IO) 小结一下: 写在最后 疯狂创客圈 百万级流量 高并发实战 疯狂创客圈 Java 分布式聊天室[ 亿级流量

Java网络编程和NIO详解2:JAVA NIO一步步构建IO多路复用的请求模型

Java网络编程与NIO详解2:JAVA NIO一步步构建IO多路复用的请求模型 知识点 nio 下 I/O 阻塞与非阻塞实现 SocketChannel 介绍 I/O 多路复用的原理 事件选择器与 SocketChannel 的关系 事件监听类型 字节缓冲 ByteBuffer 数据结构 场景 接着上一篇中的站点访问问题,如果我们需要并发访问10个不同的网站,我们该如何处理? 在上一篇中,我们使用了java.net.socket类来实现了这样的需求,以一线程处理一连接的方式,并配以线程池的控制

Java网络编程与NIO详解2:JAVA NIO 一步步构建I/O多路复用的请求模型

微信公众号[黄小斜]作者是蚂蚁金服 JAVA 工程师,专注于 JAVA 后端技术栈:SpringBoot.SSM全家桶.MySQL.分布式.中间件.微服务,同时也懂点投资理财,坚持学习和写作,相信终身学习的力量!关注公众号后回复"架构师"即可领取 Java基础.进阶.项目和架构师等免费学习资料,更有数据库.分布式.微服务等热门技术学习视频,内容丰富,兼顾原理和实践,另外也将赠送作者原创的Java学习指南.Java程序员面试指南等干货资源. 当前环境 jdk == 1.8 代码地址 gi

Java IO模型:BIO、NIO、AIO

Java IO模型:BIO.NIO.AIO 本来是打算直接学习网络框架Netty的,但是先补充了一下自己对Java 几种IO模型的学习和理解.分别是 BIO.NIO.AIO三种IO模型. IO模型的基本说明 BIO模型图 缺点: 如果有很多个Client,则会产生很多个线程.压力主要是在服务器端.客户端的压力并不大. 另外建立连接之后,并不是在时时刻刻的使用.会有空间时间. 会阻塞. NIO模型图 特点: 事件驱动 多路复用 Netty底层使用的NIO模型 AIO模型 目前还未得到广泛运用.异步