这是我见过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();
    }
}

 

posted @ 2020-12-29 14:56  程序杰杰  阅读(128)  评论(0编辑  收藏  举报