zoukankan      html  css  js  c++  java
  • 同步异步和阻塞非阻塞

    很多时候会涉及到同步、异步、阻塞、非阻塞的考虑,这四种调用方式容易混淆或者不清晰,这里大致了解下他们的的概念及区别。

    同步异步

    同步异步关注的是通信机制

    同步

    调用开始后,调用者必须等待被调用方法完成返回结果后,才能继续执行后续的操作。

    例1:打电话预定酒店,接线员让请等待,然后查询是否满足,查询到结果后告诉了你(返回结果),这样才挂断电话。

    异步

    调用开始后,会立即返回,继续执行后续的操作。不需要等待调用结果。当被调用方法完成后,通过callback函数或其他方法通知执行结果。

    异步方法通常会在另外一个线程中,不会阻塞调用者的执行。

    例2:打电话预定酒店,接线员说知道了 等查询好了告诉你,然后通话结束。酒店查询完成后,回电(callback)告诉你相关结果。

    阻塞非阻塞

    阻塞和非阻塞形容多线程间的相互影响,关注的是调用者在等待结果时的程序状态

    阻塞

    阻塞调用,调用结果返回前,当前进程会被挂起。一直等待中,无法执行其他操作。等待中什么都没干。

    例3:打电话预定酒店,酒店去查询是否满足,这个过程你啥都没干,等待直到查询好结果告诉了你挂断电话。

    非阻塞

    非阻塞调用,即使没有立即返回结果,当前线程也不会被挂起。

    例4:打电话预定酒店,接线员说知道了,然后通话结束。这个过程你开始做其他事。只是每隔几分钟询问一下是否有结果。

    总而言之,同步不等于阻塞,异步不等于非阻塞,不是同一个概念。

    同步可能是阻塞,也可能非阻塞。如上述例子中例3 例4:例3-是阻塞的(一直等待知道最终结果),例4-是非阻塞的(每次都是有获得结果,只是在获得需要结果前每隔一段时间检查一次)

  • 相关阅读:
    php基础:函数定义和时间戳函数
    php基础:函数
    http协议基础
    laravel基础②
    laravel基础①安装、配置虚拟主机
    composer
    git基础⑤远程仓库
    windows+caffe(一)——自己环境
    caffe问题集锦
    使用cygwin出现syntax error near unexpected token'$'do
  • 原文地址:https://www.cnblogs.com/fanglongxiang/p/12865750.html
Copyright © 2011-2022 走看看