Chinaunix首页 | 论坛 | 博客
  • 博客访问: 62117
  • 博文数量: 9
  • 博客积分: 417
  • 博客等级: 入伍新兵
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-12 13:07
文章分类

全部博文(9)

文章存档

2017年(1)

2012年(2)

2011年(6)

分类: C/C++

2011-08-11 12:41:05

阻塞/非阻塞,同步/异步 的区别。(此处为本人的理解,如有不对或者不妥当的地方,欢迎大家批评指正)
 
有这么一个过程要处理,假如条件不满足该过程无法继续执行,有这么两种方式可以选择。一种是将该线程挂起,一直等到条件满足,然后继续执行该线程直到返回执行结果;再一种方式就是,线程直接返回,不等待,那要怎么才能知道条件满足了呢,可以通过不停的轮询来查询结果是否满足。第一种处理方式就是所谓的阻塞调用,后者当然就是非阻塞调用了;譬如服务器端等待客户端连接的accept函数,如果没有客户端连接,也就是相对应的I/O没有数据到来,该函数执行过程中就挂起,直到有客户端连接上来,如果要是使用非阻塞调用,accept就直接返回,然后程序通过轮询来检测是否有客户端连接了上来。
 
同步和异步是另一种情况。还有这么一个过程需要处理,譬如有一段内存要拷贝,可以有两种方式来处理,一种就是线程一直在拷贝直到拷贝结束,然后线程继续执行返回执行结果;再一种就是线程直接返回,通过其他的方式来获取拷贝结果。前者就是所谓的同步,而后者就是异步
 
考虑上述两种情况,这两组概念的其实是有本质的区别,“异步不见得就是非阻塞”!在“信号驱动 I/O”这篇博文里我还特意测试了一下,socket异步的时候accept是不是就成了非阻塞的,测试结果是“no”!
 
通常阻塞/非阻塞通常是指接口的性质,但是同步/异步是指用户程序获取结果的时刻(是及时还是非及时)。
 
关于这两组概念的相应实例,在以后的实例代码中也会标出来的。
阅读(1911) | 评论(0) | 转发(0) |
0

上一篇:信号驱动 I/O

下一篇:I/O 数据处理方式

给主人留下些什么吧!~~