同步/异步&阻塞/非阻塞总结

来源:互联网 发布:linux 对外ddos攻击 编辑:程序博客网 时间:2024/06/06 00:22
   这篇文章最初使用cterm发表在学校BBS上的,所以排版有点乱,大家将就着看吧
发信人: bripengandre (老老实实做人|踏踏实实做事), 信区: Programming
标  题: 同步/异步 &阻塞/非阻塞总结版(转载)
发信站: 武汉白云黄鹤站 (2008年07月20日11:29:07 星期天), 站内信件

【 以下文字转载自 SOCKET 讨论区 】
【 原文由 bripengandre 所发表 】

    版上已有yacht和popy兄等人的大作,但因为都是讨论型作品,所以总结力度不是特别
强。下面我就结合他们的观点,加上自己的理解,对这个问题来个总结。文中不对之处,
还请各位及时指出^_^

1、首先同步和异步是时序概念,阻塞和非阻塞是一种响应模式(特别是当资源受限时,
响应很不一样)。

2、同步可以看作是通信双方都清楚的事件流,是通信协议最重要的部分。没有同步,就
是没有共同语言,同步是通信的前提。

3、为什么要有异步?异步是为了提供并发性而出现的一个概念(如线程就是一种异步机制
,中断也是)。

    2中已提到同步是通信的前提,所以所谓的异步不是就1对1的通信而说的,而是就
1对多或多对多这样的通信整体来说的。所以就具体的1对1通信来说,异步需要提供回调、
事件或信号等机制来同步。举个例子:A进程与B进程存在了耗时的通信,于是A开一个线程
A1与B周旋,不等A1与B通信完成而用其它线程继续与C,D等进程通信,当A1与B通信完毕后
,采用同步机制(信号,事件等)来通知A,B进程.这样从整体上看,A进程与B进程间的通信是
异步的,而更为细化点A1与B还是同步的.

4、阻塞与非阻塞的出现也是为了提供并发性而出现的一种实现机制.在单任务机器上阻塞
是必然的,而在多任务机器上,阻塞给其它非阻塞提供了更多的调度机会.

阻塞与非阻塞最大的区别是:当操作环境不具备时,阻塞操作不返回,阻塞的执行者就被挂
起,直到操作环境具备时,阻塞操作才返回,阻塞的执行者被唤醒;而非阻塞操作则不然,无
论操作环境是否具备,都是立即返回.

5、正因为同步/异步与阻塞/非阻塞是两个不同的概念,所以你中有我,我中有你.同步是
通信前提,阻塞/非阻塞以及异步归根到1对1通信时都是同步的;异步是并发思想/概念,没
有异步,阻塞/非阻塞就没了指导思想,阻塞何时变成非阻塞(这个通知机制就是异步的
概念);阻塞/非阻塞是实现多对多异步通信的一种手段,其实,我们用其它手段实现异步通信
时,最终还是通过阻塞某些操作并不阻塞另外一些操作来实现的~~


6、总结。同步是逻辑层次上的点对点的一致协商是通信前提,异步是并发(包含突发)的代
名词(写到最后突然发现的,不知是不是思维走入死胡同了^_^),阻塞/非阻塞是实现并发
的手段。
补充说明:电气电子通信中经常提到异步通信,这里的异步通信是指通信双发的时钟步调
不怎么严格一致,最终通过起始位和停止位等来实现同步。所以同步是逻辑层次上的点对
点一致协商^_^

写到这里,我头都晕了~~~就扔笔了^_^
--
※ 修改:·bripengandre 于 07月20日11:28:52 修改本文·[FROM: bbs.whnet.edu.cn]
※ 来源:·武汉白云黄鹤站 bbs.whnet.edu.cn·
--
※ 来源:·武汉白云黄鹤站 bbs.whnet.edu.cn·
--
※ 转载:·武汉白云黄鹤站 bbs.whnet.edu.cn·[FROM: bbs.whnet.edu.cn]
 
原创粉丝点击