当前位置:首页 > JAVA > 正文内容

java 中的 BIO、NIO、AIO 有什么区别?

高老师3年前 (2023-07-12)JAVA578
BIO(Blocking IO,阻塞IO)、NIO(Non-blocking IO,非阻塞IO)和AIO(Asynchronous IO,异步IO)

假设你是一名快递员,要将包裹从仓库送到客户手中。以下是对BIO、NIO和AIO的形象解释:

BIO(Blocking IO,阻塞IO):这就像你是一名传统的快递员,当你要送货时,你进入仓库,并告诉工作人员要准备哪些包裹。然后你等待工作人员将包裹逐个交给你,你必须等待每个包裹都准备好后才能离开仓库。在这个过程中,你不能去派送其他包裹,只能一直等待。这就是BIO的工作方式,当一个IO操作被调用时,程序将被阻塞,直到操作完成才能继续执行。

NIO(Non-blocking IO,非阻塞IO):现在,你成为了一位更高效的快递员。不再等待工作人员将包裹逐个交给你,而是主动询问他们是否已经准备好了所有包裹。如果包裹准备好了,你可以立即拿起它们并开始派送。如果还有包裹未准备好,你可以继续询问其他工作人员或者去派送已准备好的包裹。这就是NIO的工作方式,当一个IO操作被调用时,程序将立即返回,不会被阻塞,可以继续执行其他任务。通过使用选择器(Selector)和事件通知机制,NIO可以实现非阻塞的IO操作。

AIO(Asynchronous IO,异步IO):现在,你变成了一名更高级的快递员,你不仅可以主动询问工作人员包裹是否准备好,还可以异步地等待他们通知你包裹已经准备好了。这样,你可以同时处理多个包裹的派送,无需等待每个操作完成。你告诉工作人员可以稍等片刻,然后去派送已准备好的包裹。当工作人员通知你包裹准备好了,你再回来继续派送。这就是AIO的工作方式,当一个IO操作被调用时,程序会立即返回,它会在后台进行处理,并通过回调机制通知操作的完成。

其中NIO基于select模型实现,AIO基于epoll模型实现(windows下是基于iocp)

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/452.html

分享给朋友:

“java 中的 BIO、NIO、AIO 有什么区别?” 的相关文章

java Character 类,java判断字符是否是一个字母,java判断字符是否是一个数字,java判断字符是否是一个空白,java判断字符是否是小写字母,java判断字符是否是大写字母,java转换字符为大写,java转换字符为小写

java Character 类,java判断字符是否是一个字母,java判断字符是否是一个数字,java判断字符是否是一个空白,java判断字符是否是小写字母,java判断字符是否是大写字母,java转换字符为大写,java转换字符为小写

java判断字符是否是一个字母System.out.println(Character.isLetter('a'));java判断字符是否是一个数字System.out.println(Character.isDigit('0'));java判断字符是否是一个空白Sy...

java String 类 ,java 字符串类,java创建字符串,java获取字符串长度,java连接字符串,java格式化字符串

java String 类 ,java 字符串类,java创建字符串,java获取字符串长度,java连接字符串,java格式化字符串

在java中字符串属于对象,刚开始我就疑惑为什么int char等类型都是小写,结果String是大写,java太反人类,后来才知道String是对象。(1).java创建字符串String text = "net"; String tex...

java睡眠方法,java睡眠函数,java睡眠时间,java睡眠一分钟,java睡眠五秒钟

java睡眠方法,java睡眠函数,java睡眠时间,java睡眠一分钟,java睡眠五秒钟

(1).java睡眠函数Thread.sleep(时间);  //单位为毫秒(2).java睡眠函数例子Date dNow = new Date(); SimpleDateFormat ft = new&nbs...

java正则表达式判断字符串是否包含,java判断字符串是否包含

java正则表达式判断字符串是否包含,java判断字符串是否包含

pattern表示正则表达式,接收正则表达式作为参数例子:String content = "my name is gaojiufeng"; String pattern = "....

java正则appendReplacement方法和java正则appendTail

java正则appendReplacement方法和java正则appendTail

假如有个字符串为"fatcatfatcatfat",正则为“cat”当调用appendReplacement(sb, "dog")时appendReplacement方法都会把匹配到的内容替换为dog,并把匹配到字符串的前面几个字符串+dog送给sb里,所以第...

java 可变参数

java 可变参数

java 可变参数// 定义方法 public static int sum(int... number) {     int result = 0;  &nb...