谁能用大白话帮忙解释一下同步、异步的概念,14:00之前结贴给分!

kissknife 2006-04-04 09:47:33
看了点同步套接字、异步套接字的内容,对同步、异步没有形象的概念。
诸位高手帮忙用形象的语言解释一下同步、异步,以及使用同步或异步的好处坏处,多谢!
...全文
395 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
kissknife 2006-04-04
  • 打赏
  • 举报
回复
多谢几位。

以烧水为例,如果我仅有两件事可做:烧水、喝开水,这需要异步吗?
同样,以简单的socket通信来说,假设只有件事:建立连接、发送信息,这需要异步吗?
nonocast 2006-04-04
  • 打赏
  • 举报
回复
你可以看下我原来写的这篇文章
http://www.gameres.com/Articles/Program/Control/IOCP.htm
nonocast 2006-04-04
  • 打赏
  • 举报
回复
先简单的提一下同步和异步这两个概念,逻辑上来讲做完一件事后再去做另一件事就是同步,而同时一起做两件或两件以上事的话就是异步了。你也可以拿单线程和多线程来作比喻。但是我们一定要将同步和堵塞,异步和非堵塞区分开来,所谓的堵塞函数诸如accept(…),当调用此函数后,此时线程将挂起,直到操作系统来通知它,”HEY兄弟,有人连进来了”,那个挂起的线程将继续进行工作,也就符合”生产者-消费者”模型。堵塞和同步看上去有两分相似,但却是完全不同的概念。大家都知道I/O设备是个相对慢速的设备,不论打印机,调制解调器,甚至硬盘,与CPU相比都是奇慢无比的,坐下来等I/O的完成是一件不甚明智的事情,有时候数据的流动率非常惊人,把数据从你的文件服务器中以Ethernet速度搬走,其速度可能高达每秒一百万字节,如果你尝试从文件服务器中读取100KB,在用户的眼光来看几乎是瞬间完成,但是,要知道,你的线程执行这个命令,已经浪费了10个一百万次CPU周期。所以说,我们一般使用另一个线程来进行I/O。重叠IO[overlapped I/O]是Win32的一项技术,你可以要求操作系统为你传送数据,并且在传送完毕时通知你。这也就是[完成]的含义。这项技术使你的程序在I/O进行过程中仍然能够继续处理事务。事实上,操作系统内部正是以线程来完成overlapped I/O。你可以获得线程所有利益,而不需要付出什么痛苦的代价。
effun 2006-04-04
  • 打赏
  • 举报
回复
很简单啊,就象你烧开水,如果你站在炉子边上等水烧开再去做别的事就是同步。如果水放在炉子上以后你就去做别的事,等水开了以后会通过水壶上的汽笛通知你,这就是异步。
bearocean 2006-04-04
  • 打赏
  • 举报
回复
大白话是吧

简单的异步(Asynchronous)调用是这样一种调用方式:发起者请求一个异步调用,通知执行者,然后处理其他工作,在某一个同步点等待执行者的完成;执行者执行调用的实际操作,完成后通知发起者。

比如.net的Socket异步调用机制。
就是在BeginAccept的时候调用一个异步处理程序。
ice_frank 2006-04-04
  • 打赏
  • 举报
回复
同步方法调用在程序继续执行之前需要等待同步方法执行完毕返回结果.
异步方法则在被调用之后立即返回以便程序在被调用方法完成其任务的同时执行其它操作.
kissknife 2006-04-04
  • 打赏
  • 举报
回复
请问它们是一般都和线程扯上关系吗?为什么?
jijl2001 2006-04-04
  • 打赏
  • 举报
回复
同步就是做了一件事后就得等这件事做完才能做另一件
异步就是做了一件事后可以做另一件,
runnercn 2006-04-04
  • 打赏
  • 举报
回复
同步就好比你是一事必躬亲的人,也即你不是一个好领导;而异步就是,你不做,但是你可以派你手下的得力干将去做,做完了回来通知你一下就可以了,也即你是一个有前途的领导。不知道这样说你名不明白。好处你也应该知道了吧。
kissknife 2006-04-04
  • 打赏
  • 举报
回复
多谢楼上的各位了。
effun 2006-04-04
  • 打赏
  • 举报
回复
喝开水当然要等到水开了才能喝,所以应该同步。当然,发送信息也必须要等到连接建立以后,因此必须是同步的。当然,你可以在等待水烧开的时候去做点别的家务,扫扫地什么的,而不是傻乎乎地看着水被烧开。
koenemy 2006-04-04
  • 打赏
  • 举报
回复
都不需要。

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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