精华内容
下载资源
问答
  • 同步:线程自己把数据从内核复制到用户空间,期间不能做其它事情,一直等待数据复制完毕。 异步:系统内核把数据从内核复制到用户空间,然后再通知相应线程进行数据处理。 总结:阻塞/非阻塞:发生请求后,...

    对于发生一次网络IO,可以分为两部分:

    1、等待数据:

          阻塞:线程一直阻塞等待数据。

      非阻塞:线程发送请求后,不等待数据,通过轮询/信号量等方式去获取数据是否准备好。

    2、将数据从内核复制到用户空间:

         同步:线程自己把数据从内核复制到用户空间,期间不能做其它事情,一直等待数据复制完毕。       

         异步:系统内核把数据从内核复制到用户空间,然后再通知相应线程进行数据处理。

     

    总结:阻塞/非阻塞:发生请求后,是否等待接收方处理好数据(是否等待数据处理好)。   

               同步/异步:    线程是否需要等待数据从内核复制到用户空间(是否等待数据复制)。(没有异步阻塞、异步非阻塞之分,异步必定非阻塞)

     

    再结合以下的io模型图来理解:

    同步阻塞IO:阻塞等待数据(阻塞),准备好数据后,等待数据从内核复制到用户空间(同步)

     

    同步非阻塞IO:发生请求后,轮询数据是否准备好(非阻塞);准备好数据后,发送数据复制命令,等待数据从内核复制到用户空间(同步)

     

    同步非阻塞IO(信号驱动IO):发生请求后,内核通过信号量标志数据是否准备好(非阻塞);准备好数据后,发送数据复制命令,等待数据从内核复制到用户空间(同步)

    同步非阻塞IO(多路复用O):阻塞在select,发生请求后注册socket到select,select轮询多个socket数据是否准备好(非阻塞);准备好数据后,发送数据复制命令,等待数据从内核复制到用户空间(同步)

    异步IO:发生请求后,不需等待数据是否准备好(非阻塞);准备好数据后,内核会把数据从内核复制到用户空间,然后发送信号通知数据已经复制完成(异步)

     

    展开全文
  • 阻塞"非阻塞""同步"“异步"不能简单的从字面理解,提供一个从分布式系统角度的回答。1.同步与异步同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)所谓同步,...

    “阻塞”与"非阻塞"与"同步"与“异步"不能简单的从字面理解,提供一个从分布式系统角度的回答。

    1.同步与异步

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

    所谓同步,就是在发出一个*调用*时,在没有得到结果之前,该*调用*就不返回。但是一旦调用返回,就得到返回值了。

    换句话说,就是由*调用者*主动等待这个*调用*的结果。

    而异步则是相反,*调用*在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在*调用*发出后,*被调用者*通过状态、通知来通知调用者,或通过回调函数处理这个调用。

    典型的异步编程模型比如Node.js

    举个通俗的例子:

    你打电话问书店老板有没有《分布式系统》这本书,如果是同步通信机制,书店老板会说,你稍等,”我查一下",然后开始查啊查,等查好了(可能是5秒,也可能是一天)告诉你结果(返回结果)。

    而异步通信机制,书店老板直接告诉你我查一下啊,查好了打电话给你,然后直接挂电话了(不返回结果)。然后查好了,他会主动打电话给你。在这里老板通过“回电”这种方式来回调。

    2. 阻塞与非阻塞

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

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

    非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

    还是上面的例子,

    你打电话问书店老板有没有《分布式系统》这本书,你如果是阻塞式调用,你会一直把自己“挂起”,直到得到这本书有没有的结果,如果是非阻塞式调用,你不管老板有没有告诉你,你自己先一边去玩了, 当然你也要偶尔过几分钟check一下老板有没有返回结果。

    在这里阻塞与非阻塞与是否同步异步无关。跟老板通过什么方式回答你结果无关。

    在处理 IO 的时候,阻塞和非阻塞都是同步 IO。

    只有使用了特殊的 API 才是异步 IO。

    1e9b087818c2430ff83183b2b25782f5.png

    对unix来讲:阻塞式I/O(默认),非阻塞式I/O(nonblock),I/O复用(select/poll/epoll)都属于同步I/O,因为它们在数据由内核空间复制回进程缓冲区时都是阻塞的(不能干别的事)。只有异步I/O模型(AIO)是符合异步I/O操作的含义的,即在1数据准备完成、2由内核空间拷贝回缓冲区后 通知进程,在等待通知的。

    以Linux下 tcp socket编程为例:

    阻塞就是 recv/read的时候 socket接收缓冲区要是有数据就读, 没数据我就一直睡觉赖着不走,直到有数据来了读完我才走。send/write的时候,要是发送缓冲区满了,没有空间继续发送了我也一直睡觉赖着不走,直到发送缓冲区腾出足够的空间让我把数据全部塞到发送缓冲区里我才走。(当然如果你通过setsockopt设置了读写超时,超时时间到了还是会返回-1和EAGAIN,不再睡觉等待)

    各一句话

    IO时进入内核代码没有立即返回,则直到返回前用户的进程代码一直处于「阻塞」状态。

    从IO请求到数据复制到进程空间的过程中,若进程代码发生过阻塞,则IO过程是「同步」的,反之「异步」。

    同步和异步仅仅是关于所关注的消息如何通知的机制。同步的情况下,是由处理消息者自己去等待消息是否被触发,而异步的情况下是由触发机制来通知处理消息者

    阻塞和非阻塞应该是发生在消息的处理的时刻。阻塞其实就是等待,发出通知,等待结果完成。非阻塞属于发出通知,立即返回结果,没有等待过程。

    关于同步异步、阻塞非阻塞的概念: 同步就是同步,异步就是异步! 目前应用中阻塞和非阻塞是针对同步应用而言。关于这些概念之间的关系的理解,可以通过以下几个例子来说明。

    例子1:老板布置了一个调研任务,老板自己需要写一个调研报告。这个调研的一个子任务由同学A完成,老板最终需要将同学A的任务整合到自己的调研报告中。因为老板的调研报告需要用到同学A的调研结果,那么老板的调研报告就必须等到同学A调研完成以后才能完成。那么在整个调研的过程中,最终的调研报告和同学A的调研任务之间就是同步关系,因为两个任务之间有着时序的关系。

    首先一个IO操作其实分成了两个步骤:发起IO请求和实际的IO操作,同步IO和异步IO的区别就在于第二个步骤是否阻塞,如果实际的IO读写阻塞请求进程,那么就是同步IO,因此阻塞IO、非阻塞IO、IO服用、信号驱动IO都是同步IO,如果不阻塞,而是操作系统帮你做完IO操作再将结果返回给你,那么就是异步IO。阻塞IO和非阻塞IO的区别在于第一步,发起IO请求是否会被阻塞,如果阻塞直到完成那么就是传统的阻塞IO,如果不阻塞,那么就是非阻塞IO。

    看了一些这两个概念的解释,感觉不分场景的笼统理解是不对的,下面陈述一下我的理解:

    这是两对概念,用在不同的语境会有一些不同的含义,不能一概而论。

    整体来说,同步就是两种东西通过一种机制实现步调一致,异步是两种东西不必步调一致。

    一、同步调用与异步调用:

    在用在调用场景中,无非是对调用结果的不同处理。

    我理解同步调用就是调用一但返回,就能知道结果,而异步是返回时不一定知道结果,还得通过其他机制来获知结果,如:

    a.  状态

    b.  通知

    c.  回调函数

    这里的同步调用不一定会阻塞,例如立即返回失败的结果。

    而异步调用立即返回时,你还拿不到结果的。

    二、同步线程与异步线程:

    同步线程:即两个线程步调要一致,要相互协商。两个线程的运行进度各不相同,怎么才能步调一致呢?我们直观的理解就是,快的等慢的呗!快的阻塞一下等到慢的步调一致即可。

    异步线程:步调不用一致,各自按各自的步调运行,不受另一个线程的影响。

    同步是指两个线程的运行是相关的,其中一个线程可能要阻塞等待另外一个线程的运行;

    异步的意思是两个线程毫无相关,自己运行自己的。

    三、同步通信与异步通信:

    这里的同步和异步是指:发送方和接收方是否协调步调一致!

    同步通信是指:发送方和接收方通过一定机制,实现收发步调协调。如:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式

    异步通信是指:发送方的发送不管接收方的接收状态,如:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。

    阻塞和非阻塞就比较容易理解了,没有上面那么多场景,阻塞就是这个事情阻到这儿了,不能继续往下干事了,非阻塞就是这个事情不会阻碍你继续干后面的事情。

    阻塞可以是实现同步的一种手段!例如两个东西需要同步,一旦出现不同步情况,我就阻塞快的一方,使双方达到同步。

    同步是两个对象之间的关系,而阻塞是一个对象的状态。

    0b1331709591d260c1c78e86d0c51c18.png

    展开全文
  • 同步与阻塞区别

    2021-02-26 12:25:10
    阻塞:表示该线程被挂起,失去cpu操作权利,等待被唤醒。 同步:线程仍然在运行,没有被挂起,比如在一个线程中,需要调用一个本地方法或者远程方法,在本地方法或远程方法返回前,该线程不能继续向下执行。 ...

    阻塞:表示该线程被挂起,失去cpu操作权利,等待被唤醒。

    同步:线程仍然在运行,没有被挂起,比如在一个线程中,需要调用一个本地方法或者远程方法,在本地方法或远程方法返回前,该线程不能继续向下执行。

    展开全文
  • 同步是个过程,阻塞是线程的一种状态。多个线程操作共享变量时可能会出现竞争。这时需要同步来防止两个以上的线程同时进入临界区,在这个过程中,后进入临界区的线程将阻塞,等待先进入的线程走出临界区。 线程同步...

    同步是个过程,阻塞是线程的一种状态。多个线程操作共享变量时可能会出现竞争。这时需要同步来防止两个以上的线程同时进入临界区,在这个过程中,后进入临界区的线程将阻塞,等待先进入的线程走出临界区。
    线程同步不一定发生阻塞!!!线程同步的时候,需要协调推进速度,互相等待和互相唤醒会发生阻塞。
    同样,阻塞也不一定同步。

    展开全文
  • 阻塞"非阻塞""同步"“异步"不能简单的从字面理解,提供一个从分布式系统角度的回答。 1.同步与异步 同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication) 所谓同步,...
  • 线程同步与阻塞的关系?同步一定阻塞吗?阻塞一定同步吗? 同步是个过程,阻塞是线程的一种状态。多个线程操作共享变量时可能会出现竞争。这时需要同步来防止两个以上的线程同时进入临界区,在这个过程中,后进入...
  • 1、前言前一段时间出去面试,被问到同步、异步与阻塞、非阻塞区别。我一时半会没有想出来,作为一个工作三年的人来说,实在很惭愧。我当时理解同步、异步属于两个进程中间的协作关系,例如使用浏览器访问一个网站...
  • 同步和异步,阻塞和非阻塞是大家经常会听到的概念,但是它们是从不同维度来描述一件事情,常常很容易混为一谈。1. 同步和异步同步和异步描述的是消息通信的机制。同步当一个request发送出去以后,会得到一个response...
  • 同步和异步,阻塞和非阻塞是大家经常会听到的概念,但是它们是从不同维度来描述一件事情,常常很容易混为一谈。 前言 线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下下面这张较为经典的图: ...
  • 阻塞"非阻塞""同步"“异步"不能简单的从字面理解,提供一个从分布式系统角度的回答。1.同步与异步同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)所谓同步,...
  • 同步与异步 同步(Synchronous) 异步( Asynchronous) 阻塞( Blocking ) 非阻塞( Nonblocking) 同步异步关注的是通信方式,同步是得到结果后才返回调用。异步则是在调用发出后直接返回,通过其他方式告知结果。 阻塞...
  • 阻塞队列与同步队列

    2021-04-01 18:33:18
    阻塞队列与同步队列 阻塞队列: 一、BlockingQueue 什么情况下会使用阻塞队列: 多线程并发处理,线程池! 学会使用队列 添加、移除 四组API 方式 抛出异常 有返回值,不抛出异常 阻塞等待 超时等待 ...
  • java同步阻塞IO

    2021-02-26 14:46:00
    js的异步IO即是异步的,也是非阻塞的。非阻塞的IO需要底层操作系统的支持,比如在linux上的epoll系统调用。从另外一个角度看待的话,底层操作系统对于非阻塞IO的系统调用是一种多路复用机制,js对其进行了比较厚的...
  • 同步阻塞、同步非阻塞、异步阻塞、异步非阻塞先验知识此处的异步指的是什么同步、异步、阻塞、非阻塞同步阻塞、同步非阻塞、异步阻塞、异步非阻塞一个生动的例子 先验知识   在解释这几个概念之前,需要注意的是:...
  • Java传统io是同步阻塞ioserverSocket.accept()的时候会阻塞br.readLine()的时候会阻塞代码串行执行,没有多线程和回调,是同步进行的。ServerSocket serverSocket = new ServerSocket(8080);Socket accept = ...
  • 并发、并行、同步、异步、阻塞、非阻塞、协程这些概念网上众说纷纭,有时经常混为一体,本文尽量从本质上做一下解释。并发:一个时间段内,有几个程序在同一个cpu上运行,但是任意时刻只有一个程序在cpu上运行并行...
  • 阻塞阻塞与同步异步的区别 原文地址:https://www.zhihu.com/question/19732473/answer/241673170 IO 概念区分 四个相关概念: 同步(Synchronous) 异步( Asynchronous) 阻塞( Blocking ) 非阻塞( Nonblocking) ...
  • 同步与阻塞的概念

    2021-08-25 09:24:18
    A调用B A调用B的同一个过程,对调用者A来说就是...简言之,同步与异步的区别在于B是不是立即返回。 阻塞 A调用B,A会被挂起,等待B的返回结果,什么事都不可以做。 小明去2号窗口办业务,一直等着中间啥也没干。 非阻
  • 阻塞I/O非阻塞I/O、同步与异步的区别同步与异步同步异步例子阻塞与阻塞阻塞阻塞例子阻塞I/O阻塞I/O阻塞I/O非阻塞I/O 同步与异步 同步和异步关心的是消息通信机制; 同步 同步指的就是,在发出一个调用没有...
  • Java 同步与异步-阻塞与阻塞理解Java 中同步与异步,阻塞与阻塞都是用来形容交互方式,区别在于它们描述的是交互的两个不同层面。同步与异步同步与异步更关注交互双方是否可以同时工作。以同步的方式完成任务...
  • 1 同步阻塞消息处理 假如有这样一个系统功能,客户端提交Event至服务器,服务器接收到客户请求之后开辟线程处理客户请求,经过比较复杂的业务计算后将结果返回给客户端 图5-1所示的设计存在几个显著的缺陷,具体...
  • 之前一直把异步和非阻塞混为一谈,在 了解BIO和NIO的...2.同步/非同步阻塞/非阻塞区别: https://blog.csdn.net/qq_35503998/article/details/82835517 这篇将的比较中肯 3.BIO和NIO的区别: https://zhuanlan.zh
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼前言在最近的一些面试中,跟应聘者聊了比较多关于“同步/异步,阻塞/非阻塞”相关的话题,发现大家对于这些概念的理解都比较...同步阻塞放假了,老王回到了乡下,由于...
  • 不知原文出处,只记录分享“阻塞"非阻塞""同步"“异步"不能简单的从字面理解,提供一个从分布式系统角度的回答。同步与异步 同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous ...
  • (同步阻塞)老张觉得自己有点傻2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。3 ...
  • 前言在进行网络编程的时候,听的最多的词汇就是同步、异步,阻塞与阻塞,在进行多线程编程的时候,也会出现同步的概念,基于B/S架构的服务中也会有同步,异步调用,这些词汇都具体在指代什么?这个问题可能一般的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 463,269
精华内容 185,307
关键字:

同步与阻塞的区别