Netty也支持AIO并提供了相应的类: AioEventLoopGroup
,AioCompletionHandler
, AioServerSocketChannel
,AioSocketChannel
, AioSocketChannelConfig
。
其它使用方法和NIO类似。
Netty对缓冲区的扩展io.netty.buffer和java.nio.ByteBuffer的区别
官方文档Using as a generic library描述了两者的区别,主要还是友好性,扩展和性能的考虑。
http://zizihaier.iteye.com/blog/1767409也提到:
ByteBuffer主要有两个继承的类分别是:HeapByteBuffer和MappedByteBuffer。他们的不同之处在于HeapByteBuffer会在JVM的堆上分配内存资源,而MappedByteBuffer的资源则会由JVM之外的操作系统内核来分配。DirectByteBuffer继承了MappedByteBuffer,采用了直接内存映射的方式,将文件直接映射到虚拟内存,同时减少在内核缓冲区和用户缓冲区之间的调用,尤其在处理大文件方面有很大的性能优势。但是在使用内存映射的时候会造成文件句柄一直被占用而无法删除的情况,网上也有很多介绍。
Netty中使用ChannelBuffer来处理读写,之所以废弃ByteBuffer,官方说法是ChannelBuffer简单易用并且有性能方面的优势。在ChannelBuffer中使用ByteBuffer或者byte[]来存储数据。同样的,ChannelBuffer也提供了几个标记来控制读写并以此取代ByteBuffer的position和limit,分别是:
0 <= readerIndex <= writerIndex <= capacity,同时也有类似于mark的markedReaderIndex和markedWriterIndex。当写入buffer时,writerIndex增加,从buffer中读取数据时readerIndex增加,而不能超过writerIndex。有了这两个变量后,就不用每次写入buffer后调用flip()方法,方便了很多。
Netty的零拷贝(zero copy)
Netty的“零拷贝”主要体现在如下三个方面:
1) Netty的接收和发送ByteBuffer采用DIRECT BUFFERS,使用堆外直接内存进行Socket读写,不需要进行字节缓冲区的二次拷贝。如果使用传统的堆内存(HEAP BUFFERS)进行Socket读写,JVM会将堆内存Buffer拷贝一份到直接内存中,然后才写入Socket中。相比于堆外直接内存,消息在发送过程中多了一次缓冲区的内存拷贝。
2) Netty提供了组合Buffer对象,可以聚合多个ByteBuffer对象,用户可以像操作一个Buffer那样方便的对组合Buffer进行操作,避免了传统通过内存拷贝的方式将几个小Buffer合并成一个大的Buffer。
3) Netty的文件传输采用了transferTo(JDK关于NIO的API中有使用)方法,它可以直接将文件缓冲区的数据发送到目标Channel,避免了传统通过循环write方式导致的内存拷贝问题。
参考:
http://colobu.com/2014/11/13/java-aio-introduction/
http://www.uml.org.cn/j2ee/2014060411.asp
http://openjdk.java.net/projects/nio/presentations/TS-4222.pdf
相关推荐
NULL 博文链接:https://shihuan830619.iteye.com/blog/2259258
jaca视频教程 jaca游戏服务器端开发 Netty NIO AIO Mina视频教程 课程目录: 一、Netty快速入门教程 01、第一课NIO 02、第二课netty服务端 03、第三课netty客户端 04、第四课netty线程模型源码分析(一) 05、...
一个完全基于java 实现的,长得有点像netty的aio网络框架
BIO,NIO,AIO,Netty面试题
包含了Netty,NIO AIO,Mina知识的详解以及netty结合spring protocolbuf的源码
netty 主要用于多socket server 集成
BIO,NIO,AIO,Netty面试题
BIO、NIO、AIO、Netty 、TCP全网最全解析!Netty中提供了哪些线程模型?
Netty最新jar包,里面有源码,需要的朋友可以下载。。。
1. BIO模型 源码 2. NIO模型 源码 3. AIO模型 源码 4. Netty 源码
t-io是基于aio(nio2)的网络编程框架,和netty属于同类,但t-io更注重开发一线工程师的感受,提供了大量和业务相关的API。基于t-io来开发IM、TCP私有协议、RPC、游戏服务器端、推送服务、实时监控、物联网、UDP、...
主要是介绍java方面网络方面 网络通信方面的面试题,核心内容主要是关于BIO,NIO,AIO,Netty的面试,算是一套八股文吧,还是老话,该背的还是要背一背!!!
从IO流到BIO,再到NIO,AIO,以及Reactor模式和Proactor模式来分析netty
BIO,NIO,AIO,Netty面试题 35道,面试通关宝典
BIO、NIO、AIO、Netty 什么是IO:Java中I/O是以流为基础进行数据的输入输出的,所有数据被串行化(所谓串行化就是数据要按顺序 进行输入输出)写入输出流。简单来说就是java通过io流方式和外部设备进行交互。在Java...
Netty权威指南[李林锋著][电子工业出版社].pdf,本书为第二版,压缩包里含本书源代码,Netty5 Java BIO、NIO、AIO
基于java的一下案例,包括排序算法、多线程、NIO、AIO、Netty,Kafka等等
BIO,NIO,AIO,Netty面试题 35道.pdf Java并发编程最全面试题 123道.pdf Java并发编程面试题 75题.pdf JAVA核心面试知识点整理.pdf Java垃圾收集必备手册.pdf Java虚拟机(JVM)面试题 51道.pdf SpringBoot面试题 30道...