BIO AIO NIO 的区别

BIO AIO NIO Java 中用于 I/O 操作的三种不同的编程模型。它们的区别在于它们执行I/O 操作的方式和效率。在讲 BIO,NIO,AIO 之前先来回顾一下这样几个概念:同步与异步,阻塞与非阻塞。

同步与异步

同步:同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。
异步:异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等机制来通知调用者其返回结果。
同步和异步的区别最大在于异步的话调用者不需要等待处理结果,被调用者会通过回调等机制来通知调用者其返回结果。

阻塞和非阻塞

阻塞: 阻塞就是发起一个请求,调用者一直等待请求结果返回,也就是当前线程会被挂起,无法从事其他任务,只有当条件就绪才能继续。
非阻塞:非阻塞就是发起一个请求,调用者不用一直等着结果返回,可以先去干其他事情

1. BIO是同步阻塞I/O模型,它使用一个线程来处理一个请求,如果这个请求没有被处理完,这个线程就会一直等待,直到请求处理完成。这种模型适用于连接数较小的情况。

2. NIO是同步非阻塞I/O模型,它使用单个线程来处理多个请求,这些请求可以同时被这个线程处理,它通过轮询的方式来处理I/O请求,如果有I/O请求就处理,没有就继续轮询。这种模型适用于连接数较多但是连接时间短的情况。

3. AIO是异步非阻塞I/O模型,这种模型不需要为每个请求创建一个线程,由操作系统内部的线程来处理 I/O请求,同时它也具有非阻塞的特性,I/O请求不会一直等待,而是异步执行。这种模型适用于连接数很多的情况。

举个生活中简单的例子
你妈妈让你烧水,小时候你比较笨啊,在那里傻等着水开( 同步阻塞 )。
等你稍微再长大一点,你知道每次烧水的空隙可以去干点其他事,然后只需要时不时来看看水开了没有( 同步非阻塞 )。
后来,你们家用上了水开了会发出声音的壶,这样你就只需要听到响声后就知道水开了,在这期间你可以随便干自己的事情,你需要去倒水了(异步非阻塞 )。

你可能感兴趣的:(nio)