- 浏览: 35902 次
最新评论
同步、异步、阻塞和非阻塞
- 博客分类:
- 技术杂绘
同步、异步、阻塞和非阻塞
2010年11月03日
原文网址:http://hi.baidu.com/epeak/blog/item/97c62cf3ba7da2 c90b46e0e7.html
在进行网络编程时,我们常常见到同步、异步、阻塞和非阻塞四种调用方式。这些方式彼此概念并不好理解。下面是我对这些术语的理解。
同步
所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等)。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。最常见的例子就是 SendMessage。该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。当对方处理完毕以后,该函数才把消息处理函数所返回的 LRESULT值返回给调用者。
异步
异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。以CAsycSocket类为例(注意,CSocket从CAsyncSocket派生,但是起功能已经由异步转化为同步),当一个客户端通过调用 Connect函数发出一个连接请求后,调用者线程立刻可以朝下运行。当连接真正建立起来以后,socket底层会发送一个消息通知该对象。这里提到执行部件和调用者通过三种途径返回结果:状态、通知和回调。可以使用哪一种依赖于执行部件的实现,除非执行部件提供多种选择,否则不受调用者控制。如果执行部件用状态来通知,那么调用者就需要每隔一定时间检查一次,效率就很低(有些初学多线程编程的人,总喜欢用一个循环去检查某个变量的值,这其实是一种很严重的错误)。如果是使用通知的方式,效率则很高,因为执行部件几乎不需要做额外的操作。至于回调函数,其实和通知没太多区别。
阻塞
阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。有人也许会把阻塞调用和同步调用等同起来,实际上他是不同的。对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已。例如,我们在CSocket中调用Receive函数,如果缓冲区中没有数据,这个函数就会一直等待,直到有数据才返回。而此时,当前线程还会继续处理各种各样的消息。如果主窗口和调用函数在同一个线程中,除非你在特殊的界面操作函数中调用,其实主界面还是应该可以刷新。socket接收数据的另外一个函数recv则是一个阻塞调用的例子。当socket工作在阻塞模式的时候,如果没有数据的情况下调用该函数,则当前线程就会被挂起,直到有数据为止。
非阻塞
非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。
对象的阻塞模式和阻塞函数调用
对象是否处于阻塞模式和函数是不是阻塞调用有很强的相关性,但是并不是一一对应的。阻塞对象上可以有非阻塞的调用方式,我们可以通过一定的API去轮询状态,在适当的时候调用阻塞函数,就可以避免阻塞。而对于非阻塞对象,调用特殊的函数也可以进入阻塞调用。函数select就是这样的一个例子
发表评论
-
同步对象Event的用法
2012-01-20 10:27 656同步对象Event的用法 2010年07月05日 首先介 ... -
UDP_CORK,TCP_CORK以及TCP_NODELAY
2012-01-20 10:27 827UDP_CORK,TCP_CORK以及TCP_NODE ... -
如何从Android系统中删除“无用”程序
2012-01-19 15:27 718如何从Android系统中删除“无用”程序 2010年10 ... -
刷埃及
2012-01-19 15:27 954刷埃及 2011年10月05日 1:电脑端: ... -
WINDOWS PHONE 7使用必知
2012-01-19 15:27 766WINDOWS PHONE 7使用必知 20 ... -
卸载――将vs2008彻底删除
2012-01-19 15:27 15117卸载――将vs2008彻底删除 2010年07月25日 ... -
解决导入Android-sample出错问题
2012-01-19 15:27 1542解决导入Android-sample出错问题 2011年07 ... -
我的日志
2012-01-17 05:14 786我的日志 7小时前 在座的所有人qt遐倏,赆伊∝ ... -
写给男孩懵懂的青春
2012-01-17 05:14 1239写给男孩懵懂的青春 7小时前 1. 清雅,脱俗。这是她带 ... -
木有标题
2012-01-17 05:14 766木有标题 7小时前 坐在山之巅,抬头欲抓住一片云彩,让它 ... -
准备买进!再创新低将是绝对的“空头陷阱”!
2012-01-17 05:14 810准备买进!再创新低将是绝对的“空头陷阱”! 7小时前 ... -
都2012了你还瞎晃悠啥呢
2012-01-17 05:14 739都2012了你还瞎晃悠啥呢 7小时前 ... -
自己做屏保
2012-01-16 04:07 996自己做屏保 2011年05月08 ... -
黑客基地联盟网站刷钻教程欢迎转载
2012-01-16 04:06 5718黑客基地联盟网站刷钻教程欢迎转载 2010年07月28日 ... -
Windows消息拦截
2012-01-16 04:06 1696Windows消息拦截 2010年02月06日 拦截应 ... -
雨林木风 Windows server 2003
2012-01-16 04:06 970雨林木风 Windows server 2003 2009年 ... -
【源于网络知识点收集】插件破解方法专辑(二)
2012-01-16 04:06 828【源于网络知识点收集】插件破解方法专辑(二) 2010年03 ...
相关推荐
同步异步阻塞非阻塞
异步、同步、阻塞、非阻塞的说明和解释,用于深入理解。
tcp socket同步 异步 阻塞 非阻塞 的解释.zip 基本概念:同步、异步、阻塞和非阻塞的区别 同步异步与阻塞非阻塞的区别 C++ 同步异步与阻塞非阻塞的区别
讲述同步、异步、阻塞、非阻塞的区别,通俗易懂,是我见到的最口语话最清晰的材料,文中比喻恰当,深入浅出。
本文主要讲了IO中同步、异步与阻塞、非阻塞的区别。希望对你的学习有所帮助。
聊聊同步、异步、阻塞与非阻塞 聊聊同步、异步、阻塞与非阻塞 聊聊同步、异步、阻塞与非阻塞
java 同步、异步、阻塞和非阻塞分析.docx
同步异步,阻塞非阻塞,I/O学习总结的思维导图,需要结合Richard Stevens的书来学习
主要介绍了详解socket阻塞与非阻塞,同步与异步、I/O模型,socket网络编程中的同步,异步,阻塞式,非阻塞式,有何联系与区别,本文将详细讲诉。
在进行网络编程时,我们常常见到同步、异步、阻塞和非阻塞四种调用方式。这些方式彼此概念并不好理解。下面是我对这些术语的理解。 同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。...
本文档,是我本人翻译的一篇介绍linux系统同步异步阻塞非阻塞的知识的,你在网上看到的百分之八十的知识,可能都以讹传讹,让你看的一知半解,因为网上很多该类博客,没有讲解清楚,举得例子:如老王烧水,小王银行...
主要介绍了java 中同步、异步、阻塞和非阻塞区别详解的相关资料,需要的朋友可以参考下
用一个最简单的例子说明异步非阻塞Socket的基本原理和工作机制
网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO
这篇文章里,简单而且形象的介绍了同步于异步——阻塞与非阻塞的知识。希望可以帮助大家
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non...
主要介绍了JAVA同步、异步、阻塞和非阻塞之间的区别,文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
阻塞非阻塞异步同步笔记1
6-【高并发编程】再谈同步、异步、阻塞、非阻塞-1809261
主要介绍了java 同步、异步、阻塞和非阻塞分析的相关资料,需要的朋友可以参考下