同步,异步,阻塞,非阻塞的区别

17 篇文章 3 订阅

同步与异步

同步与异步的重点在消息通知的方式上 , 也就是调用结果通知的方式 ;

同步 : 当一个同步调用发出去后 , 调用者要一直等待调用结果的通知 , 直到得到调用结果 ;

异步 : 当一个异步调用发出去后 , 这个调用就直接返回了 , 调用者不能立即得到调用结果的返回 , 而是在调用发出后 , 被调用者通过状态 , 通知来通知调用者 , 或通过回调函数处理这个调用 ;

异步调用要想获得结果 , 一般有两种方式 :

  1. 主动轮询异步调用的结果
  2. 被调用方通过 callback 来通知调用方调用结果

举个例子 :

  • 同步买奶茶 : 小明点单交钱 , 然后等着拿奶茶 ;
  • 异步买奶茶 : 小明点单交钱 , 店员给小明一个小票 , 等小明奶茶做好了再来取 ;

异步买奶茶 , 小明要想知道奶茶是否做好了 , 有两种方式 :

  1. 小明主动去问店员 , 一会就去问一下 : “奶茶做好了吗?”… 直到奶茶做好 ;
  2. 等奶茶做好了 , 店员喊一声 :”小明 , 奶茶好了!” , 然后小明去取奶茶 ;

阻塞与非阻塞

阻塞与非阻塞的重点在于进/线程等待消息时候的行为 , 也就是在等待消息的时候 , 当前进/线程是挂起状态 , 还是非挂起状态;

  • 阻塞调用发出去后 , 在消息返回之前 , 当前进/线程会被挂起 , 直到有消息返回 , 当前进/线程才会被激活 ;
  • 非阻塞调用发出去后 , 不会阻塞当前进/线程 , 而会立即返回 ;

举个例子 :

  • 阻塞买奶茶 : 小明点单交钱 , 干等着拿奶茶 , 什么事都不做 ;
  • 非阻塞买奶茶 : 小明点单交钱 , 等着拿奶茶 , 等的过程中 , 时不时刷刷微博 , 朋友圈…

总结

同步与异步 , 重点在于消息通知的方式 ;

阻塞与非阻塞 , 重点在于等消息时候的行为 ;

所以 , 就有了下面4种组合方式 :

  1. 同步阻塞 : 小明在柜台干等着拿奶茶 ;
  2. 同步非阻塞 : 小明在柜台边刷微博边等着拿奶茶 ;
  3. 异步阻塞 : 小明拿着小票啥都不干 , 一直等着店员通知他拿奶茶 ;
  4. 异步非阻塞 : 小明拿着小票 , 刷着微博 , 等着店员通知他拿奶茶 ;

原文链接 : Nginx/Swoole高并发原理初探

个人网站: Github , 欢迎点击给星

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值