同步异步和阻塞非阻塞

一. 同步/异步

  1. 同步和异步一般是两个有关联(或调用)关系的任务块(或方法块)之间通讯交互和执行时序的一种描述。
  1. 同步:
    1)被调用模块在执行完其全部逻辑后才返回;
    2)调用模块需等待被调用模块执行完其代码逻辑后,再继续执行其逻辑;
    3)两任务模块在一次调用期间不会出现时间重叠;

  2. 异步:
    1)被调用模块在返回结果后,仍需一定时间才能完成其逻辑;
    2)调用模块无需等待被调用模块执行完其代码逻辑后,再继续执行其逻辑;
    3)两任务模块在一次调用期间可能会出现时间重叠;

二. 阻塞/非阻塞

  1. 阻塞/非阻塞指是否阻塞当前线程, 阻塞的是线程;

  2. 是描述某个程序执行需要依赖某个前置条件,此时若条件不满足时:
    1)如果选择等待就是阻塞;
    2)如果不等待直接返回就是非阻塞;

  3. 例子:
    1)BIO等待数据到达;
    2)等待释放锁;

参考

  1. https://en.wikipedia.org/wiki/Asynchronous_system

  2. stackoverflow: asynchronous-vs-synchronous-execution-what-does-it-really-mean

评论