同步和异步与阻塞与非阻塞是在通信和I/O中常用的字眼,之前在许多地方同步与阻塞,异步与非阻塞常常被混为一谈,带来了许多混乱,其实同步、异步和阻塞、非阻塞是两个不同的概念。最近随着异步IO(AIO)越来越多的应用,对这两个概念进行区分和解释的文章也越来越多,但是问起身边的同学,能说清楚的倒也不多,所以我就顺便跟风写一篇科普文吧(越来越水了=_=)。
同步(synchronous)和异步(asynchronous)其实是针对消息的发送和接受的次序而言的(在通信中就是消息的发送和接收,在IO中就是数据的读和写)。同步的意思就是消息的发送和接收是有序的,即接收和发送第二个包一定在第一个包之后第三个包之前,而不是乱序。异步的意思就是消息的发送和接收是可以乱序的,第一个包没发完可以直接发第二个包。
至于阻塞(block)和非阻塞(non-block)其实描述的是进程或线程进行等待时的一种方式。阻塞的意思是等待时进程或线程需要挂起,而非阻塞则是等待时线程或进程不需要被挂起,不影响线程的执行,这时线程或进程可以继续处理其它事物,不因为这个等待而受到影响(当然它仍然在等待这个消息,只不过可能会在线程或进程执行周期的某一个地方去查看消息的通知,而不是立即在原地等待)。
举个例子,两个人之间发短信,最简单的就是同步阻塞的方式,一个人发短信,然后啥也不干地等在手机前面,直到对方回信,接下来才发第二条短信(这时也确认了第一条短信已发到)。而同步非阻塞方式也就是大家常用的方式,则是发出去消息,然后去干别的事,(体现了非阻塞)等对方回短信之后(相当于确认了第一条短信已收到,并且有后续数据过来),再发第二条短信(体现了同步)。异步阻塞的方式,则是一口气发出几十条短信(由于中国移动并不保证发出短信的先后顺序,可能导致对方收到短信的顺序和发出去时不一致,这就体现了异步的概念,而且理论上发信的顺序也可以是乱的),发完之后就啥也不干,等对方一条一条的回信(这体现了阻塞的概念)。而如果在一口气发出几十条短信后没有傻傻的等待,而是去别的地方玩去了,对方的回信到一条读一条,则就变成异步非阻塞的方式了。
相关推荐
本文主要讲了IO中同步、异步与阻塞、非阻塞的区别。希望对你的学习有所帮助。
同步异步阻塞非阻塞
讲述同步、异步、阻塞、非阻塞的区别,通俗易懂,是我见到的最口语话最清晰的材料,文中比喻恰当,深入浅出。
异步、同步、阻塞、非阻塞的说明和解释,用于深入理解。
聊聊同步、异步、阻塞与非阻塞 聊聊同步、异步、阻塞与非阻塞 聊聊同步、异步、阻塞与非阻塞
java 同步、异步、阻塞和非阻塞分析.docx
tcp socket同步 异步 阻塞 非阻塞 的解释.zip 基本概念:同步、异步、阻塞和非阻塞的区别 同步异步与阻塞非阻塞的区别 C++ 同步异步与阻塞非阻塞的区别
主要介绍了详解socket阻塞与非阻塞,同步与异步、I/O模型,socket网络编程中的同步,异步,阻塞式,非阻塞式,有何联系与区别,本文将详细讲诉。
在进行网络编程时,我们常常见到同步、异步、阻塞和非阻塞四种调用方式。这些方式彼此概念并不好理解。下面是我对这些术语的理解。 同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。...
主要介绍了java 中同步、异步、阻塞和非阻塞区别详解的相关资料,需要的朋友可以参考下
用一个最简单的例子说明异步非阻塞Socket的基本原理和工作机制
这篇文章里,简单而且形象的介绍了同步于异步——阻塞与非阻塞的知识。希望可以帮助大家
网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non...
主要介绍了JAVA同步、异步、阻塞和非阻塞之间的区别,文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
6-【高并发编程】再谈同步、异步、阻塞、非阻塞-1809261
本文档,是我本人翻译的一篇介绍linux系统同步异步阻塞非阻塞的知识的,你在网上看到的百分之八十的知识,可能都以讹传讹,让你看的一知半解,因为网上很多该类博客,没有讲解清楚,举得例子:如老王烧水,小王银行...
同步异步,阻塞非阻塞,I/O学习总结的思维导图,需要结合Richard Stevens的书来学习
https://blog.csdn.net/xxxxxx91116/article/details/12083613【Linux网络编程】同步,异步,阻塞,非阻
主要介绍了java 同步、异步、阻塞和非阻塞分析的相关资料,需要的朋友可以参考下