码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-05-24 12:56:55      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:机制   最大   不用   如何   java   做事   blocking   回调   请求   

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

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

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

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

 

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

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

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

非阻塞:不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。

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

 

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

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

 

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

我们是用传统的水壶烧水。在水烧开之前我们一直做在水壶前面,等着水开。这就是阻塞的。

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

 

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

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

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

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

 

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 

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

标签:机制   最大   不用   如何   java   做事   blocking   回调   请求   

原文地址:https://www.cnblogs.com/NetPig/p/10917339.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!