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

同步、异步、阻塞、非阻塞这几个概念在并发编程和架构设计中用的比较多,这里小记一下对他们的理解,先阐释一下他们之间的区别:

 

同步:多个任务或事件必须顺序执行,前一个任务没执行完,后一行任务就不能进行。

实现:常见的顺序编程, 串行执行

场景:B/S架构的HTTP请求-响应模式、OA流程。

 

异步多个任务或事情可以并行执行,任意一个任务的执行不会阻塞另外一个任务的执行。异步调用完成后,通过通知或回调将结果传递给接收者。异步常用于操作时间比较耗时的场合,为了不block当前的工作流程,而采用异步。

实现:新建一个线程,或把任务放到消息队列中由消费者处理、并行处理

场景:发短信、写信、写邮件、发微信,网上办电信业务(比如申请信用卡)、node.js、ajax。

 

同步和异步着重点在于多个任务的执行过程中,一个任务的执行是否会导致整个流程的阻塞

 

阻塞:当调用没有结果返回时,线程处于挂起状态(线程进入非可执行状态,在这个状态下,cpu不会给线程分配时间片,即线程暂停运行),等待结果返回。

场景:排队进火车检票口、排队办业务。

 

非阻塞:当调用没有结果返回时,马上返回一个信息,告知条件不满足,不会一直在那儿等待。

场景: 网上买火车票时,没订到票时,使用定时监控软件去看有没有火车票。

 

 

而阻塞和非阻塞着重点在于发出一个请求操作时,如果进行操作的条件不满足是否会返会一个标志信息告知条件不满足

 

 

容易confuse的地方

有时候阻塞和同步容易confuse,实际上是不同的。对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已。

 

小结

想构建高性能的服务,应该考虑是否可以使用异步非阻塞架构, 比如 node.js、netty、nio等。

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值