这是我见过BIO/NIO/AIO讲的最清楚的博客了
最后,再举几个不是很恰当的例子来说明这四个IO Model:
有A,B,C,D四个人在钓鱼:
对应BIO,NIO,IO多路复用(select,epoll),AIO
A用的是最老式的鱼竿,所以呢,得一直守着,等到鱼上钩了再拉杆;
B的鱼竿有个功能,能够显示是否有鱼上钩,所以呢,B就和旁边的MM聊天,隔会再看看有没有鱼上钩,有的话就迅速拉杆;
C用的鱼竿和B差不多,但他想了一个好办法,就是同时放好几根鱼竿,然后守在旁边,一旦有显示说鱼上钩了,它就将对应的鱼竿拉起来;
D是个有钱人,干脆雇了一个人帮他钓鱼,一旦那个人把鱼钓上来了,就给D发个短信。
package com.nxj.other; import java.nio.ByteBuffer; import java.util.Scanner; /** * @author ningxinjie * @date 2021/1/3 * NIO使得用户程序可以直接使用直接内存,用于数据缓冲区,这样一来,对于文件频繁读写 * 效率显然会提升,因为不需要内核态与用户态来回切换,来回拷贝了 */ public class NIOBufferTest { private static final int BUFFER = Integer.MAX_VALUE ; public static void main(String[] args) { ByteBuffer byteBuffer = ByteBuffer.allocateDirect(BUFFER); System.out.println("直接内存分配完毕"); Scanner scanner = new Scanner(System.in); scanner.next(); System.out.println("直接内存开始释放"); byteBuffer = null; System.gc(); } }