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

     可以这么理解。阻塞和非阻塞,应该描述的是一种状态,同步与非同步描述的是行为方式。
     
    1、同步和异步
      同步和异步关注的消息通信机制
      1、同步:就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。 
      2、异步:调用在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用。
     
    2、阻塞和非阻塞
      阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态
      1、阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
      2、非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。
     
    3、关于同步阻塞  同步非阻塞  异步阻塞  异步非阻塞   网上有一个很好的例子,解释的很清楚
     

        老张爱喝茶,废话不说,煮开水。
        出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。
        1、 老张把水壶放到火上,立等水开。(同步阻塞)
            老张觉得自己有点傻
        2、 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)
          老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。
        3 、老张把响水壶放到火上,立等水开。(异步阻塞)
          老张觉得这样傻等意义不大
        4、 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)
          老张觉得自己聪明了。


          所谓同步异步 是你获得水开了的方式不同。
          同步就是烧开水,要自己来看开没开;

          异步就是水开了,然后水壶响了通知你水开了。
          

          所谓阻塞非阻塞,说的是你得到结果之前能不能干其他事情。
          阻塞是烧开水的过程中,你不能干其他事情(即你被阻塞住了);

          非阻塞是烧开水的过程里可以干其他事情。

              
  • 相关阅读:
    最小化x11 debian
    chroot后 运行xeyes Error: Can't open display: :0.0
    std::bind1st和std::bind2nd
    bind1nd,not1,compose1等用法
    python中*和**的参数
    QT静态编译
    Qt中QEvent和信号槽的区别
    JSON文件内容加注释的几种方法
    C语言--#、##、__VA_ARGS__ 和##__VA_ARGS__ 的使用
    QT正则表达式
  • 原文地址:https://www.cnblogs.com/shun-gege/p/7923134.html
Copyright © 2011-2022 走看看