IO中同步与异步,阻塞与非阻塞区别(转)

同步和异步关注的是消息通讯机制 (synchronous communication/asynchronous communication)异步

同步请求,A调用B,B的处理是同步的,在处理完以前他不会通知A,只有处理完以后才会明确的通知A。async

异步请求,A调用B,B的处理是异步的,B在接到请求后先告诉A我已经接到请求了,而后异步去处理,处理完以后经过回调等方式再通知A。函数

同步和异步最大的区别就是被调用方的执行方式和返回时机。同步指的是被调用方作完事情以后再返回,异步指的是被调用方先返回,而后再作事情,作完以后再想办法通知调用方。.net

 

阻塞请求,A调用B,A一直等着B的返回,别的事情什么也不干。线程

非阻塞请求,A调用B,A不用一直等着B的返回,先去忙别的事情了。blog

阻塞调用是指调用结果返回以前,当前线程会被挂起。函数只有在获得结果以后才会返回。同步

非阻塞:不能马上获得结果以前,该函数不会阻塞当前线程,而会马上返回。io

阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.请求

 

同步是个过程,阻塞是线程的一种状态。程序

同步、异步说的是被调用者会不会通知,阻塞、非阻塞说的是调用者会不会卡住不动。

 

先来看同步(普通水壶)场景中是如何包含阻塞和非阻塞状况的。

咱们是用传统的水壶烧水。在水烧开以前咱们一直作在水壶前面,等着水开。这就是阻塞的。

咱们是用传统的水壶烧水。在水烧开以前咱们先去客厅看电视了,可是水壶不会主动通知咱们,须要咱们时不时的去厨房看一下水有没有烧开。这就是非阻塞的。

 

再来看异步(有提醒功能的水壶)场景中是如何包含阻塞和非阻塞状况的

咱们是用带有提醒功能的水壶烧水。在水烧发出提醒以前咱们一直作在水壶前面,等着水开。这就是阻塞的。

咱们是用带有提醒功能的水壶烧水。在水烧发出提醒以前咱们先去客厅看电视了,等水壶发出声音提醒咱们。这就是非阻塞的。

阻塞非阻塞说的是我,同步异步说的是水壶。

 

Java中的三种IO模型

在Java语言中,一共提供了三种IO模型,分别是阻塞IO(BIO)、非阻塞IO(NIO)、异步IO(AIO)。

这里面的BIO和NIO都是同步的IO模型,即同步阻塞IO和同步非阻塞IO,异步IO指的是异步非阻塞IO。

BIO (Blocking I/O):同步阻塞I/O模式,数据的读取写入必须阻塞在一个线程内等待其完成。

NIO (New I/O):同时支持阻塞与非阻塞模式,但主要是使用同步非阻塞IO。

AIO (Asynchronous I/O):异步非阻塞I/O模型。原文:https://blog.csdn.net/qq_35642036/article/details/82798722 

相关文章
相关标签/搜索