在网络编程中,我们经常会遇到阻塞、非阻塞、同步、异步这两组概念,许多人很容易混淆,现在就给大伙儿说说我对着两组概念的理解。
先说说阻塞与非阻塞,这主要和程序等待消息时的状态有关
1、阻塞
程序会阻塞在某一个函数,而不往下执行,就如挂在那里一样,所有的其他业务也都不执行,为一直等到消息到来才往下执行。
2、非阻塞
程序不会阻塞在某一个函数,不等待消息到来,立即返回,往下执行。
举个例子,TCP协议中的send,系统会为其分配一块发送缓存区,假设现在总的缓存 区的大小为1000.,而缓存区里已经有了500个数据,这时调用send,发送1000个字节数据,这时如果在阻塞模式下,send的会先最多的数据放入缓存,直到缓存区满,然后程序就会阻塞在那里,一直等到将所有数据全部发出去为止,而如果在非阻塞模式下,send的会先将最多的数据放入缓存之后,就马上返回,剩余数据下回接着发送,不会卡在send函数中。
同步和异步这两个概念,其实是与消息通知机制有关的。
1、同步
发送消息,等待消息处理完后,才往下执行。就如MFC里的SendMessage(),
2、异步
发送消息,不等待消息处理完,就往下执行,让后通过特定的接口或者事件,消息通知你事情完成了。如MFC里的PostMessage()
粗略的讲了一下以上的两个概念,估计大家会问,那么阻塞与同步,非阻塞与异步有啥区别,用例说明。
比如我们现在去银行,你可以选择两种方式,取票等待和排队等待,如果你排队等待,你就得等前面所有人都办理完了,才能办理业务,此时如果在等待的过程中,你啥事都不能干,这时你就处于阻塞状态了,如果你还能一边打电话,一边喝饮料,看书,不过你还得时不时的抬头看看,前面的人还有多少,啥时候轮到你,免的错过办理,这时你就是处于同步状态。
也就是说,阻塞就是程序挂在那里,其他一切事情都不能做,直到当前事件返回为止,而同步得再原地等待消息,而与此同时,不影响其他业务的执行,体现在程序里就是其他线程的业务处理。
如果你取票等待,那么你只要坐在椅子上,这时你可以做你想做的事情,比如听听歌,看看书,打打电话,而到你时,窗口会自动叫号通知你,这时你就处于非阻塞状态。
如果此时你还觉得不过瘾,想出去溜达溜达,那么你可以和大厅的工作人员说一下,我去哪里,待会到我了,到某某地方通知我一下,然后你就可以出去做你想做的事情,直到工作人员来叫你为止。这时你就是处于异步状态。两者结合起来就是所谓的异步非阻塞模式,这种由于效率很高,在网络编程里经常被用到。
相关推荐
同步异步阻塞非阻塞
异步、同步、阻塞、非阻塞的说明和解释,用于深入理解。
本文档,是我本人翻译的一篇介绍linux系统同步异步阻塞非阻塞的知识的,你在网上看到的百分之八十的知识,可能都以讹传讹,让你看的一知半解,因为网上很多该类博客,没有讲解清楚,举得例子:如老王烧水,小王银行...
tcp socket同步 异步 阻塞 非阻塞 的解释.zip 基本概念:同步、异步、阻塞和非阻塞的区别 同步异步与阻塞非阻塞的区别 C++ 同步异步与阻塞非阻塞的区别
讲述同步、异步、阻塞、非阻塞的区别,通俗易懂,是我见到的最口语话最清晰的材料,文中比喻恰当,深入浅出。
主要介绍了详解socket阻塞与非阻塞,同步与异步、I/O模型,socket网络编程中的同步,异步,阻塞式,非阻塞式,有何联系与区别,本文将详细讲诉。
怎样理解阻塞非阻塞与同步异步的区别最近在使用shell_exec去执行一个php脚本时,出现了进行阻塞情况(数据量大,需要等待进行执行结果,时间耗费太长)。于是
阻塞非阻塞异步同步笔记1
聊聊同步、异步、阻塞与非阻塞 聊聊同步、异步、阻塞与非阻塞 聊聊同步、异步、阻塞与非阻塞
本文主要讲了IO中同步、异步与阻塞、非阻塞的区别。希望对你的学习有所帮助。
2.3 epoll_wait函数函数声明:int epoll_wait(int epfd, struct epoll_event events, int max
java 同步、异步、阻塞和非阻塞分析.docx
用一个最简单的例子说明异步非阻塞Socket的基本原理和工作机制
同步异步,阻塞非阻塞,I/O学习总结的思维导图,需要结合Richard Stevens的书来学习
parallel-ssh:非阻塞异步并行SSH客户端库
在进行网络编程时,我们常常见到同步、异步、阻塞和非阻塞四种调用方式。这些方式彼此概念并不好理解。下面是我对这些术语的理解。 同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。...
nuix下的I/O编程机制,阻塞、非阻塞等
这篇文章里,简单而且形象的介绍了同步于异步——阻塞与非阻塞的知识。希望可以帮助大家
主要介绍了java 中同步、异步、阻塞和非阻塞区别详解的相关资料,需要的朋友可以参考下