同步和异步的区别

ryfdizuo 2011-09-23 07:56:18
请分别举例子说明。今天悲剧了,顺便散分。。。
...全文
449 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jake443403168 2011-09-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 demon__hunter 的回复:]
同步:打电话
异步:发短信
[/Quote]
++
很形象
hzc543806053 2011-09-25
  • 打赏
  • 举报
回复
线程同步 :有次序的执行 会阻塞
烈火蜓蜻 2011-09-24
  • 打赏
  • 举报
回复
严格的说,异步还是有两种。
一种是等,但是等的过程和同步不一样,等的时候可以做别的工作,但是程序的主线还是等待
WaitforSingleObject(hEvent,INFINTE,TRUE);
另外一种是CALLBACK方式,这种异步是完全不等待,程序主线发出请求之后就干别的事情去了,完全不理会请求执行的如何。
所有异步必然设计两个以上的线程(不然不存在异步的问题),第一种方式下,请求的后期工作是在发出请求的线程上执行,第二种方式下,后期工作可以在任何线程(通常是执行请求的线程上)完成
taodm 2011-09-24
  • 打赏
  • 举报
回复
没有上下文,没有语境,这哪有办法回答。
PG 2011-09-24
  • 打赏
  • 举报
回复
同步:专心拉屎
异步:拉屎看报子
ruyee365 2011-09-24
  • 打赏
  • 举报
回复
以前老师给我们具例子用的:
同步:每天上公交车。。大家排队顺序上。。
异步:大家同时上卡车。。没有顺序。
ryfdizuo 2011-09-24
  • 打赏
  • 举报
回复
哇哦,ls的几位总结的攒一个!
这么快就沉下去了。。。
孤舟 2011-09-24
  • 打赏
  • 举报
回复
如果在本机上 的线程同步的意思是指
两个线程 的共享内存(可以是代码也可以是数据) 在某一时刻只能被 1个线程访问
如果是 只读锁的话 那就是 某一时刻只能被 1个线程写操作 其他线程可以进行读操作 这个WIN不支持 LINUX支持
孤舟 2011-09-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jerryjbiao 的回复:]
最简单的解释就是:
同步就是消息发送出去之后要等结果出来才能做别的事;
异步就是消息发送出去之后不需要等结果出来只要得到一个简单的接收响应就可以做别的事情
[/Quote]
消息发送出去之后要等结果出来才能做别的事 这个才是异步
同步方式指的是发送方不等接收方响应,便接着发下个数据包的通信方式;而异步指发送方发出数据后,等收到接收方发回的响应,才发下一个数据包的通信方式
阻 塞套接字是指执行此套接字的网络调用时,直到成功才返回,否则一直阻塞在此网络调用上。
而非阻塞套接字是指执行此套接字的网络调用时,不管是否执行成功,都立 即返回
至善者善之敌 2011-09-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fergon 的回复:]
两个windows API:
SendMessage(...) 同步传输,向目标发送一个消息,并要求对方作出回应,得到回应后才算完成本次任务。

PostMessage(...) 异步传输,向目标发送一个消息,但不要求对方作出回应。
-------------------------------------------------------------------------------……
[/Quote]

++
楼主面试去了?
jackyjkchen 2011-09-24
  • 打赏
  • 举报
回复
同步阻塞

异步不阻塞
JV02009 2011-09-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 demon__hunter 的回复:]
同步:打电话
异步:发短信
[/Quote]
pathuang68 2011-09-24
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 healer_kx 的回复:]

我举一个例子吧,我觉得这个例子更好。

Windows API,MoveWindow,函数调用后,立竿见影,窗口一定移动到你指定的位置。
MoveWindow后,你GetWindowPos,也一定是你Move的结果。

Linux,X窗口系统中, XMoveResizeWindow去设置窗口位置,你调用返回后。
再Get它的位置,结果和Windows的同步效果不一样。

你窗口的……
[/Quote]

同步不涉及回调函数,异步涉及回调函数(上面说的事件处理)
showjim 2011-09-24
  • 打赏
  • 举报
回复
阻塞是指多个任务串行。
非阻塞是指将任务抛出去,继续串行下一个任务。
异步是指任务之间进度不相关。
同步是指多个任务之间存在进度协调。

正在玩游戏,忽然肚子饿了。
自己去煮饭炒菜,这就是阻塞。
叫外卖送饭就是非阻塞。
我玩我的游戏,送外卖的送外卖,这就是异步。
等外卖送来了才能吃饭,这就是同步。
pathuang68 2011-09-24
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 healer_kx 的回复:]

几年前,和饼子堂里面一个神仙聊天,
至少帮我区分了同步,异步,阻塞,非阻塞之间的差别。受益匪浅。
[/Quote]

以函数调用为例,我的理解供参考:
同步,函数调用后,处于等待状态,直到被调用的函数返回;
异步,函数调用后立即返回,计算通常在另外一个线程中进行,计算完成后,通常通过callback函数得到计算结果。

在大部分情况下,同步和阻塞语义相同,异步和非阻塞语义相同。

以上是个人看法,如有不对,请各位高贤指正。
5t4rk 2011-09-23
  • 打赏
  • 举报
回复
同步 我可以预知的,我也知道怎么做

异步 我也不知道什么会什么时候返回,只是调用
快乐的小菜鸟 2011-09-23
  • 打赏
  • 举报
回复
对计算机组成 和操作系统完全白痴的菜鸟感谢楼主 顺便接分
大道曙光 2011-09-23
  • 打赏
  • 举报
回复
比如PlaySound函数吧
异步播放就是 播放成功就 立即返回
同步播放 则是 这个wav文件播放完成后 函数才返回
就想叫yoko 2011-09-23
  • 打赏
  • 举报
回复
学习。
healer_kx 2011-09-23
  • 打赏
  • 举报
回复
我举一个例子吧,我觉得这个例子更好。

Windows API,MoveWindow,函数调用后,立竿见影,窗口一定移动到你指定的位置。
MoveWindow后,你GetWindowPos,也一定是你Move的结果。

Linux,X窗口系统中, XMoveResizeWindow去设置窗口位置,你调用返回后。
再Get它的位置,结果和Windows的同步效果不一样。

你窗口的位置会以X事件的方式,异步返给你。

加载更多回复(15)

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧