NIO
文章平均质量分 78
东纪元
这个作者很懒,什么都没留下…
展开
-
redis 为什么说是单线程的理解
这篇文章讲的不错。https://www.cnblogs.com/myseries/p/11733861.html我个人再对图片里讲的进行梳理:1、客户端请求建立连接、接收请求数据等等,都是通过非阻塞IO(多路复用IO)进行的,这样在单个线程处理中可以大大的节省时间。(JAVA NIO建议学习一下,就应该能明白这边的意思。我只会JAVA NIO,就用NIO讲,原理是一样的)客户端请求建立连接的多路复用就是把ServerSocketChannel注册到选择器中,绑定accept事.原创 2020-07-02 10:33:41 · 275 阅读 · 0 评论 -
java NIO零拷贝、顺序读写、MappedByteBuffer
一、顺序读写:写数据,操作文件时,采用追加的方式。速度非常快(接近内存写的速度)读数据,也不要自己去seek指定偏移量,而是按顺序read(因为read时会预读取后续一部分数据,而不是仅读取当前位置的数据,所以顺序读可以充分利用预读机制。如果自己seek,那么就无法预读,每次都要去操作本地磁盘)二、零拷贝数据拷贝时无需通过JVM内存中转。当文件1拷贝到文件2时,(1)如果是...原创 2020-01-15 16:59:31 · 1766 阅读 · 8 评论 -
NIO MappedByteBuffer
MappedByteBuffer是一种效率低于零拷贝,但高于传统IO的IO操作。算是一种弥补transferTo零拷贝时无法中间处理源数据的手段。。不过由于需要中间处理,效率自然会变得比零拷贝低。正文:其实MappedByteBuffer是抽象类,而具体实现是DirectByteBuffer和DirectByteBufferR,并且是DirectBuffer的实现。也就是说,Mappe...原创 2019-02-14 23:51:43 · 1188 阅读 · 1 评论 -
NIO SocketChannel、DatagramChannel、ServerSocketChannel的及其在阻塞与非阻塞模式下的使用
阻塞模式情况下: SocketChannel、DatagramChannel、ServerSocketChannel和我们直接使用Socket、DatagramSocket、ServerSocket是一样的,没有接收/发送了数据就一直等待,直到接收/发送了数据才会执行后面的代码。非阻塞模式:三种网络通道分别讲解:(1)ServerSocketChannel非阻塞模式下: ...原创 2019-02-16 17:00:43 · 2539 阅读 · 0 评论 -
比较两个ByteBuffer相等的规则,即ByteBuffer.equals的做了什么
1、比较的是缓冲区剩余的数据是否相等,注意,是剩余的转载 2019-02-12 22:13:29 · 503 阅读 · 0 评论 -
NIO Buffer缓冲区的duplicate与slice区别
duplicate英文翻译过来是复制的意思,根据源码,调用duplicate方法返回的Buffer对象就是复制了一份原始缓冲区,复制了position、limit、capacity这些属性,但是,复制后的缓冲区get和put所操作的数组还是与原始缓冲区一样的,所以对复制后的缓冲区进行修改也会修改原始的缓冲区,反之亦然。 slice如下图所示英文翻译后是切片、划分的意思。。。...原创 2019-02-13 14:31:42 · 4161 阅读 · 0 评论 -
NIO ByteBuffer的allocate与allocateDirect区别(HeapByteBuffer与DirectByteBuffer的区别)
其中allocateDirect分配的字节缓冲区用中文叫做直接缓冲区(DirectByteBuffer),用allocate分配的ByteBuffer叫做堆字节缓冲区(HeapByteBuffer)..其实根据类名就可以看出,HeapByteBuffer所创建的字节缓冲区就是在jvm堆中的,即内部所维护的java字节数组。而DirectByteBuffer是直接操作操作系统本地代码创建的内存缓...原创 2019-02-13 16:12:08 · 7080 阅读 · 0 评论 -
NIO buffer.compact和buffer.clear使用场景及其异同
相同点:调用完compcat和clear方法之后的buffer对象一般都是继续往该buffer中写入数据的不同点:(1)clear是把position=0,limit=capcity等,也就是说,除了内部数组,其他属性都还原到buffer创建时的初始值,而内部数组的数据虽然没赋为null,但只要不在clear之后误用buffer.get就不会有问题,正确用法是使用buffer.put从头开...原创 2019-02-13 21:42:17 · 1488 阅读 · 0 评论 -
NIO 关于SocketChannel的isConnected与finishConnect区别
-----重要的先说-----区别:1、isConnected是判断是否连接成功的,如果连接成功,则true,否则false;源码如下:通过上面两张图能够知道,isConnected只有当状态为2(已连接时)才会返回true。2、finishConnect是判断连接是否完成(看起来和isConnected一样,但是,finishConnect内部会主动抛异常,isCon...原创 2019-04-16 20:43:13 · 3999 阅读 · 0 评论