同步: 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。
同步: 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。
-
异步: 异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等
同步与异步
在讲 BIO,NIO,AIO 之前先来回顾一下这样几个概念:同步与异步,阻塞与非阻塞。
BIO NIO AIO 是Java中用于I/O操作的三种不同的编程模型。它们的区别在于它们执行I/O操作的方式和效率。
同步和异步的区别最大在于,异步调用者不需要等待处理结果,被调用者会通过回调等机制来通知调用者其返回结果
阻塞和非阻塞
-
阻塞: 阻塞就是发起一个请求,调用者一直等待请求结果返回,也就是当前线程会被挂起,无法从事其他任务,只有当条件就绪才能继续。
-
非阻塞: 非阻塞就是发起一个请求,调用者不用一直等着结果返回,可以先去干其他事情。
举个生活中简单的例子,你妈妈让你烧水,小时候你比较笨啊,在那里傻等着水开(同步阻塞)。等你稍微再长大一点,你知道每次烧水的空隙可以去干点其他事,然后只需要时不时来看看水开了没有(同步非阻塞)。后来,你们家用上了水开了会发出声音的壶,这样你就只需要听到响声后就知道水开了,在这期间你可以随便干自己的事情,壶响了你需要去倒水了(异步非阻塞)。
-
BIO是同步阻塞I/O模型,它使用一个线程来处理一个请求,如果这个请求没有被处理完,这个线程就会一直等待,直到请求处理完成。这种模型适用于连接数较小的情况。
-
NIO是同步非阻塞I/O模型,它使用单个线程来处理多个请求,这些请求可以同时被这个线程处理,它通过轮询的方式来处理I/O请求,如果有I/O请求就处理,没有就继续轮询。这种模型适用于连接数较多但是连接时间短的情况
-
AIO是异步非阻塞I/O模型,这种模型不需要为每个请求创建一个线程,由操作系统内部的线程来处理I/O请求,同时它也具有非阻塞的特性,I/
O请求不会一直等待,而是异步执行。这种模型适用于连接数很多的情况
百度安全验证