精华内容
下载资源
问答
  • 同步和阻塞

    2019-03-29 14:10:20
    同步和异步针对应用程序来,关注的是程序中间的协作关系;阻塞与非阻塞更关注的是单个进程的执行状态。 同步:执行一个操作之后,等待结果,然后才继续执行后续的操作。 异步:执行一个操作后,可以去执行其他的...

    同步和异步针对应用程序来,关注的是程序中间的协作关系;阻塞与非阻塞更关注的是单个进程的执行状态。

    同步:执行一个操作之后,等待结果,然后才继续执行后续的操作。

    异步:执行一个操作后,可以去执行其他的操作,然后等待通知再回来执行刚才没执行完的操作。

    阻塞:进程给CPU传达一个任务之后,一直等待CPU处理完成,然后才执行后面的操作。

    非阻塞:进程给CPU传达任我后,继续处理后续的操作,隔断时间再来询问之前的操作是否完成。这样的过程其实也叫轮询。

    阻塞、非阻塞、多路IO复用,都是同步IO,异步必定是非阻塞的,所以不存在异步阻塞和异步非阻塞的说法。真正的异步IO需要CPU的深度参与。换句话说,只有用户线程在操作IO的时候根本不去考虑IO的执行全部都交给CPU去完成,而自己只等待一个完成信号的时候,才是真正的异步IO。所以,拉一个子线程去轮询、去死循环,或者使用select、poll、epool,都不是异步。

    展开全文
  • 对于调用者来说是阻塞和非阻塞,被调用者是同步和异步。 同步:发了消息后,返回的结果由调用方来处理 异步:发了消息后,调用方不管了,返回的结果由我们写好程序来自动回调处理 阻塞:发了消息,调用方啥也不干...


    网上看到也有很多讲解关于同步、异步、阻塞、非阻塞,但众说纷纭,也不太好理解,下面我尝试用简单的几句话来解释这几个概念,如果有误,欢迎指出。

    同步、异步关注的是消息通信机制。阻塞、非阻塞关注的是等待消息时调用者的状态。

    一、同步

    A调用B,A必须等待B的结果返回才能干其它事。简单来说,同步就是必须一件事一件事做,等前一件做完了才能做下一件事。

    如:B/S模式中的表单提交,具体过程是:客户端提交请求->等待服务器处理->处理完毕返回,这个过程中客户端(浏览器)不能做其他事。

    二、异步

    A调用B,A没有得到结果之前,就可以继续执行后续操作。当调用完成后,一般通过状态、通知和回调来通知调用者。

    如:B/S模式中的ajax请求,具体过程是:客户端发出ajax请求->服务端处理->处理完毕执行客户端回调,在客户端(浏览器)发出请求后,仍然可以做其他的事

    通知调用者的方式 说明
    状态 监听被调用者的状态(轮询),调用者需要每隔一定时间检查一次,效率会很低
    通知 当被调用者执行完成后,发出通知告知调用者,无需消耗太多性能
    回调 与通知类似,当被调用者执行完成后,会调用调用者提供的回调函数

    三、阻塞

    阻塞调用是指调用结果返回之前,当前线程会被挂起,一直处于等待消息通知,不能够执行其他业务。

    四、非阻塞

    非阻塞调用指调用方不能立刻得到结果之前,该函数不会阻塞当前线程,一直处于激活状态,也不会让出CPU。

    五、同步和阻塞是一码事?

    有人也许把阻塞调用和同步调用等同起来,我想是因为很多时候同步操作会以阻塞的形式表现出来,实际上它们是不同的。对于同步调用来说,很多时候当前线程可能还是激活的,只是从逻辑上当前函数没有返回而已,此时这个线程可能也处理其他的消息。

    如:很多人会写阻塞的 read/write 操作,但是别忘了可以对fd设置O_NONBLOCK标志位,这样就可以将同步操作变成非阻塞的了。

    六、同步和非阻塞是否矛盾?

    非阻塞体现在用户程序发起IO操作请求后不等待数据,而是调用会立即返回一个标志信息告知条件不满足,数据未准备好,用户请求程序继续执行其他任务。执行完其他任务,用户程序会主动轮询查看IO操作条件是否满足,如果满足,则用户程序亲自参与拷贝数据动作,这是同步的过程。

    七、故事篇

    下面用一个生动的例子来讲述同步阻塞、同步非阻塞、异步阻塞、异步非阻塞:

    • 同步阻塞:小明去点火烧水(发消息),在烧水过程中,小明啥也不干,端个板凳坐着傻等(阻塞),等水开后,小明才能做下一步处理(同步)
      在这里插入图片描述

    • 同步非阻塞:小明去点火烧水(发消息),在烧水过程中,小明跑去看电视了(非阻塞),但它时不时查看一下水烧开没有,最后等水开了,小明才能做下一步处理(同步)

    小明必须在两个任务间切换,关注水是否烧开,说明线程未被阻塞,小明还可以去干其它事,同步体现在小明还是要亲自去看水是否烧开没有,说明同步异步关注消息通知机制。

    在这里插入图片描述

    • 异步阻塞:小明换了个带有铃铛的水壶,小明去点火烧水(发消息),在烧水过程中,小明啥也不干,端个板凳坐着傻等(阻塞),等水开后,铃铛自动会响通知小明水已经烧好(异步)。

    异步阻塞情况极少发生,不会真有人不用自己处理了,还傻等着吧,不会吧,不会吧?

    在这里插入图片描述

    • 异步非阻塞:小明换了个带有铃铛的水壶,小明去点火烧水(发消息),在烧水过程中,小明跑去看电视了(非阻塞),等水开后,铃铛自动会响通知小明水已经烧好(异步)。在这里插入图片描述
    展开全文
  • 阻塞和非阻塞同步和异步是node.js里经常遇到的词汇,我举个简单的例子来说明: 我要看足球比赛,但是妈妈叫我烧水,电视机在客厅,烧水要在厨房。家里有2个水壶,一个是普通的水壶,另一个是水开了会叫的那种水壶...

    解释:

    阻塞和非阻塞,同步和异步是node.js里经常遇到的词汇,我举个简单的例子来说明:

    我要看足球比赛,但是妈妈叫我烧水,电视机在客厅,烧水要在厨房。家里有2个水壶,一个是普通的水壶,另一个是水开了会叫的那种水壶。我可以:

    1. 用普通的水壶烧,人在边上看着,水开了再去看球。(同步,阻塞)这个是常规做法,但是我看球不爽了。
    2. 用普通水壶烧,人去看球,隔几分钟去厨房看看。(同步,非阻塞)这个又大问题,万一在我离开的几分钟水开了,我就麻烦了。
    3. 用会叫的水壶,人在边上看着。(异步,阻塞)这个没有问题,但是我太傻了。
    4. 用会叫的水壶,人去看球,听见水壶叫了再去看。(异步,非阻塞)这个应该是最好的。

    等着看球的我:阻塞

    看着电视的我:非阻塞

    普通水壶:同步

    会叫的水壶:异步

    所以,异步往往配合非阻塞,才能发挥出威力。

    转载于:https://www.cnblogs.com/wanlibingfeng/p/9117519.html

    展开全文
  • 这些词之间的区别难倒了很多人,还有什么同步阻塞同步阻塞, 异步阻塞, 异步非阻塞,乱七八糟的。很多文章也想讲明白这个问题。著名且引起热议的有...

    源地址 http://hi.baidu.com/deep_pro/item/db0c581af1c1f17e7b5f2534

    这些词之间的区别难倒了很多人,还有什么同步阻塞, 同步非阻塞, 异步阻塞, 异步非阻塞,乱七八糟的。
    很多文章也想讲明白这个问题。著名且引起热议的有
    http://www.ibm.com/developerworks/cn/linux/l-async/
    http://www.cppblog.com/converse/archive/2009/05/13/82879.html

    可是看了之后还是有点将信将疑,跑到图书馆翻了UNP 第一卷,不愧是圣经级别的著作,似有所悟。
    UNP所述:
    POSIX定义中,同步IO操作:IO操作将导致请求进程阻塞,直到IO操作完成。
    异步IO操作:IO操作不导致请求进程阻塞

    UNP中总结的IO模型有5种之多
    阻塞IO,非阻塞IO,IO复用,信号驱动IO,异步IO,前四种都属于同步IO。

    阻塞IO不必说了
    非阻塞IO ,IO请求时加上O_NONBLOCK一类的标志位,立刻返回,IO没有就绪会返回错误,需要请求进程主动轮询不断发IO请求直到返回正确
    IO复用同非阻塞IO本质一样,不过利用了新的select系统调用,由内核来负责本来是请求进程该做的轮询操作。看似比非阻塞IO还多了一个系统调用开销,不过因为可以支持多路IO,才算提高了效率
    信号驱动IO,调用sigaltion系统调用,当内核中IO数据就绪时以SIGIO信号通知请求进程,请求进程再把数据从内核读入到用户空间,这一步是阻塞的。
    异步IO,如定义所说,不会因为IO操作阻塞,IO操作全部完成才通知请求进程。

    这样以来,同步和阻塞,异步和非阻塞就不会被混淆了,它们不是同一个方面上的概念,不能比较区别

    同步和异步是只跟IO操作过程中进程的状态变化有关
    阻塞和非阻塞就是进程的两种状态。

    转载于:https://www.cnblogs.com/xuhj001/p/3360138.html

    展开全文
  • <br />在http://hi.baidu.com/deep_pro/blog/item/cf964b0ade9f4d1594ca6b1b.html<br />  这些词之间的区别难倒了很多人,还有什么同步阻塞同步阻塞, 异步阻塞, 异步非阻塞,乱七八糟的。...
  • java提供了同步机制来实现一个临界区,当一个线程想要访问一个临界区,它使用其中的一个同步机制来找出是否有任何其他线程执行临界 区。如果没有,这个线程就进入临界区。否则,这个线程通过同步机制暂停直到另一个...
  • 在网络通信中,经常可以看到有人将同步和阻塞等同、异步和非阻塞等同。事实上,这两对概念有一定的区别,不能混淆。两对概念的组合,就会产生四个新的概念,同步阻塞、异步阻塞、同步非阻塞、异步非阻塞。 看了...
  • 原因可能是因为同步/异步和阻塞/非阻塞是分不开的,而常见的情况是 同步阻塞 和 异步非阻塞 ,所以容易把同步和阻塞混淆,把异步和非阻塞混淆。 其实,同步包括了 同步阻塞 和 同步非阻塞 ,异步也包括了 异步阻塞 ...
  • 同步阻塞同步阻塞,异步阻塞,异步非阻塞区别关系
  • 同步和异步、阻塞和非阻塞这是两组概念,说的是不同的事情,同步和阻塞没有必然的联系,异步和非阻塞也没有必然的联系。同步和异步是只跟IO操作过程中进程的状态变化有关。阻塞和非阻塞就是进程的两种状态。比如你去...
  • 同步异步和阻塞非阻塞

    千次阅读 2016-07-21 15:40:02
    下面的内容不一定对,但是有利于理解同步异步和阻塞非阻塞。 同步异步和阻塞非阻塞是从不同层面定义的。同步异步指的是要不要等待I/O结果同步同步最好理解,发出I/O请求之后,会一直处于等待状态,直到得到I/O结果...
  • 我喜欢一个女孩,于是每天就盯着屏幕守候在手机旁边等待她的来信---同步阻塞 时间长了眼睛疼,于是就开启了来信提醒,听到声音时唤醒我迷醉的心---异步阻塞 ...同步和异步区别:相当于状态的变化是又我主动发现还是...
  • 同步和异步 同步和异步是针对线程和线程之间的行为来说的,线程1发起了请求调用,...阻塞和非阻塞是针对方法调用行为来说的,跟同步和异步没有任何的关系,阻塞就是方法调用后不会立即有返回值,一直等待调用结果...
  • 同步异步阻塞阻塞

    2019-10-06 14:22:21
    目录 一、状态介绍 二、同步和异步 2.1 例子 三、阻塞和非阻塞 3.1 例子 四、同步/异步和阻塞/非阻塞 4.1同步阻塞形式 4.2 异步阻塞形式 4.3 同步非阻塞...
  • NIO同步阻塞同步阻塞

    万次阅读 2019-02-27 15:09:26
    IO与NIO区别:其本质就是阻塞和阻塞的区别。 阻塞概念:应用程序在获取网络数据的时候,如果网络传输数据很慢,就会一直等待,直到传输完毕为止。 非阻塞概念:应用程序直接可以获取已经准备就绪好的数据,无需等待...
  • 异步or 同步 关注的是 发出调用后,当前这个调用是否直接返回,不管是否有返回结果<调用的结果> 阻塞还是非阻塞关注的是:程序等待调用的结果<返回值>的状态,在无法得到返回值的情况下,调用是否会阻塞...
  • 同步、异步、阻塞和阻塞

    千次阅读 2014-12-08 20:18:50
    表面上看,同步和阻塞都是没干完,就等着干完;异步和非阻塞都是没干完,先干别的吧,好像很类似! 实际上,同步和异步是对调用方而言,比如说同步函数、异步函数,异步函数里有个参数是回调函数; 而阻塞、非阻塞...
  • 同步异步和阻塞非阻塞的区别
  • 在网络通信中,经常可以看到有人将同步和阻塞等同,异步和非阻塞等同。事实上,这两对概念有一定的区别,不能混淆。两对概念的组合,就会产生四个新的概念,同步阻塞 异步阻塞 同步非阻塞 异步非阻塞。  同步...
  • 同步是个过程,阻塞是线程的一种状态。多个线程操作共享变量时可能会出现竞争。这时需要同步来防止两个以上的线程...线程同步的时候,需要协调推进速度,互相等待互相唤醒会发生阻塞。 同样,阻塞也不一定同步。 ...
  • 同步和异步、阻塞和非阻塞这是两组概念,说的是不同的事情,同步和阻塞没有必然的联系,异步和非阻塞也没有必然的联系。同步和异步是只跟IO操作过程中进程的状态变化有关。阻塞和非阻塞就是进程的两种状态。比如你去...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,504
精华内容 5,801
关键字:

同步和阻塞