同步、异步、阻塞、非阻塞这几个概念在并发编程和架构设计中用的比较多,这里小记一下对他们的理解,先阐释一下他们之间的区别:
同步:多个任务或事件必须顺序执行,前一个任务没执行完,后一行任务就不能进行。
实现:常见的顺序编程, 串行执行
场景:B/S架构的HTTP请求-响应模式、OA流程。
异步:多个任务或事情可以并行执行,任意一个任务的执行不会阻塞另外一个任务的执行。异步调用完成后,通过通知或回调将结果传递给接收者。异步常用于操作时间比较耗时的场合,为了不block当前的工作流程,而采用异步。
实现:新建一个线程,或把任务放到消息队列中由消费者处理、并行处理
场景:发短信、写信、写邮件、发微信,网上办电信业务(比如申请信用卡)、node.js、ajax。
同步和异步着重点在于多个任务的执行过程中,一个任务的执行是否会导致整个流程的阻塞。
阻塞:当调用没有结果返回时,线程处于挂起状态(线程进入非可执行状态,在这个状态下,cpu不会给线程分配时间片,即线程暂停运行),等待结果返回。
场景:排队进火车检票口、排队办业务。
非阻塞:当调用没有结果返回时,马上返回一个信息,告知条件不满足,不会一直在那儿等待。
场景: 网上买火车票时,没订到票时,使用定时监控软件去看有没有火车票。
而阻塞和非阻塞着重点在于发出一个请求操作时,如果进行操作的条件不满足是否会返会一个标志信息告知条件不满足。
容易confuse的地方
有时候阻塞和同步容易confuse,实际上是不同的。对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已。
小结
想构建高性能的服务,应该考虑是否可以使用异步非阻塞架构, 比如 node.js、netty、nio等。
相关推荐
同步异步阻塞非阻塞
tcp socket同步 异步 阻塞 非阻塞 的解释.zip 基本概念:同步、异步、阻塞和非阻塞的区别 同步异步与阻塞非阻塞的区别 C++ 同步异步与阻塞非阻塞的区别
异步、同步、阻塞、非阻塞的说明和解释,用于深入理解。
本文主要讲了IO中同步、异步与阻塞、非阻塞的区别。希望对你的学习有所帮助。
同步异步,阻塞非阻塞,I/O学习总结的思维导图,需要结合Richard Stevens的书来学习
聊聊同步、异步、阻塞与非阻塞 聊聊同步、异步、阻塞与非阻塞 聊聊同步、异步、阻塞与非阻塞
本文档,是我本人翻译的一篇介绍linux系统同步异步阻塞非阻塞的知识的,你在网上看到的百分之八十的知识,可能都以讹传讹,让你看的一知半解,因为网上很多该类博客,没有讲解清楚,举得例子:如老王烧水,小王银行...
java 同步、异步、阻塞和非阻塞分析.docx
主要介绍了详解socket阻塞与非阻塞,同步与异步、I/O模型,socket网络编程中的同步,异步,阻塞式,非阻塞式,有何联系与区别,本文将详细讲诉。
主要介绍了java 中同步、异步、阻塞和非阻塞区别详解的相关资料,需要的朋友可以参考下
在进行网络编程时,我们常常见到同步、异步、阻塞和非阻塞四种调用方式。这些方式彼此概念并不好理解。下面是我对这些术语的理解。 同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。...
用一个最简单的例子说明异步非阻塞Socket的基本原理和工作机制
这篇文章里,简单而且形象的介绍了同步于异步——阻塞与非阻塞的知识。希望可以帮助大家
阻塞非阻塞异步同步笔记1
网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO
怎样理解阻塞非阻塞与同步异步的区别最近在使用shell_exec去执行一个php脚本时,出现了进行阻塞情况(数据量大,需要等待进行执行结果,时间耗费太长)。于是
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non...
6-【高并发编程】再谈同步、异步、阻塞、非阻塞-1809261
主要介绍了JAVA同步、异步、阻塞和非阻塞之间的区别,文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下