NIO-概览
NIO-Buffer
NIO-Channel
NIO-Channel接口分析java
原本是想学习Netty的,可是Netty是一个NIO框架,所以在学习netty以前,仍是先梳理一下NIO的知识。经过剖析源码理解NIO的设计原理。编程
本系列文章针对的是JDK1.8.0.161的源码。微信
NIO又叫Non-blocking I/O或New I/O;全新的输入输出标准库。网络
关于I/O访问方式和I/O模型能够在《高性能网络通信原理》了解一下。并发
Java NIO是Java 1.4版加入的新特性,NIO弥补了原来的阻塞I/O的不足。
NIO引入了通道、缓冲区、选择器三个核心组件。经过这三个组件对文件,网络进行读写。框架
通道是对原I/O包中的流的模拟。与文件设备交互的全部数据都必须经过一个Channel对象,
好比读写文件流就须要建立一个FileChannel
对象,而读写网络流则须要建立SocketChannel
对象。性能
传统的IO API是面向字节流的,而在NIO中引入了Buffer(缓冲区),Buffer则和Channel进行数据交互。咱们则从Buffer读写数据。学习
传统的阻塞I/O 每个网络链接都须要一个线程读写网络流,并发量增高会产生大量的线程上下文切换,存在性能瓶颈。而NIO则可使用一个线程接收客户端链接,经过少许的几个线程作读写操做。这样极大的减小了线程数量从而提升了性能。经过选择器告知哪些I/O就绪,并且咱们能够经过不一样的选择器实现不一样的策略,而不影响其余模块,实现解耦。.net
NIO经过引入Pipe(管道)实现单向通信
NIO的文件锁能够实现文件的独占或共享。
微信扫一扫二维码关注订阅号杰哥技术分享
出处:http://www.javashuo.com/article/p-dmxplcrn-ex.html 做者:杰哥很忙 本文使用「CC BY 4.0」创做共享协议。欢迎转载,请在明显位置给出出处及连接。