同步与异步的区别

一、同步和异步的区别(1

同步,就是说你的程序在执行某一个操作时一直等待直到操作完成。 

异步,就是说程序在执行某一个操作时,只是发出开始的指令;由另外的并行程序执行这段代码,当完成时再通知调用者。

这里有个地方有相关的介绍 

http://ilinux.javaeye.com/blog/190028 

http://www.52rd.com/Blog/Detail_RD.Blog_imjacob_4832.html

 

打个比喻:

有一个男的看上了两个漂亮MM 想通过写信的方式跟他们交流感情这两个MM分别是  A,B 

同步:他先给A女写了封信然后发了出去。等了好几天 A女给他回了信,之后他才给B女写信。就是说等到一个任务返回或者结束他才继续往下做他想做的任务。 

异步:他先给A女写了封信,然后发了出去,马上又给B女写了封信也发了出去。  就是说不用等到一个任务结束就去做下一个任务。 

 

但是如果第一个任务需要第二个任务的返回值那就得用同步让第一个任务等待第二个任务结束后,获取第二个任务的返回值在继续往下做

并行:两个帅哥同时给这两个妹妹写信。

 

二、[硬件知识补充]同步和异步的区别(2

 

答案一:

1.异步传输 

通常,异步传输是以字符为传输单位,每个字符都要附加位起始位和位停止位,以标记一个字符的开始和结束,并以此实现数据传输同步。所谓异步传输是指字符与字符(一个字符结束到下一个字符开始)之间的时间间隔是可变的,并不需要严格地限制它们的时间关系。起始位对应于二进制值 0,以低电平表示,占用位宽度。停止位对应于二进制值 1,以高电平表示,占用 1~2 位宽度。一个字符占用 5~8位,具体取决于数据所采用的字符集。例如,电报码字符为位、ASCII码字符为位、汉字码则为位。此外,还要附加位奇偶校验位,可以选择奇校验或偶校验方式对该字符实施简单的差错控制。发送端与接收端除了采用相同的数据格式(字符的位数、停止位的位数、有无校验位及校验方式等)外,还应当采用相同的传输速率。典型的速率有:9 600 b/s19.2kb/s56kb/s等。 

 

异步传输又称为起止式异步通信方式,其优点是简单、可靠,适用于面向字符的、低速的异步通信场合。例如,计算机与Modem之间的通信就是采用这种方式。它的缺点是通信开销大,每传输一个字符都要额外附加23位,通信效率比较低。例如,在使用Modem上网时,普遍感觉速度很慢,除了传输速率低之外,与通信开销大、通信效率低也密切相关。

--------------------------------------------------------------------------------

2. 同步传输 

 

通常,同步传输是以数据块为传输单位。每个数据块的头部和尾部都要附加一个特殊的字符或比特序列,标记一个数据块的开始和结束,一般还要附加一个校验序列(16位或32CRC校验码),以便对数据块进行差错控制。所谓同步传输是指数据块与数据块之间的时间间隔是固定的,必须严格地规定它们的时间关系。 

 

答案二:

请讲详细一些,本人比较弱智,谢谢各位  

---------------------------------------------------------------  

同步是阻塞模式,异步是非阻塞模式。  

---------------------------------------------------------------  

我的理解:同步是指两个线程的运行是相关的,其中一个线程要阻塞等待另外一个线程的运行。异步的意思是两个线程毫无相关,自己运行自己的。   

不知对错?楼下说  

---------------------------------------------------------------  

同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。  

异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。  

 

CSDN上有讨论过:  

http://expert.csdn.net/Expert/topic/2646/2646592.xml?temp=.3842584  

http://expert.csdn.net/Expert/topic/2659/2659726.xml?temp=.1480219  

---------------------------------------------------------------  

举个不太恰当的例子,就像

SendMessage(...)  

TRACE0("just  like send");  

 

PostMessage(...)  

TRACE0("just  like WSASend  using  overlapped");  

 

SendMessage是调用的时候不返回,等消息响应后才执行TRACE0,这就是同步.  

PostMessage是调用后马上返回,不用消息响应就执行TRACE0,这就是异步.

 

答案三:

 同步和异步的区别 

 举个例子:普通B/S模式(同步)AJAX技术(异步)

同步:提交请求->等待服务器处理->处理完毕返回这个期间客户端浏览器不能干任何事

异步请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕

--------------------------------------------------------------------------------------------------------------------

同步就是你叫我去吃饭,我听到了就和你去吃饭;如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭。

异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。

所以,要我请你吃饭就用同步的方法,要请我吃饭就用异步的方法,这样你可以省钱。

--------------------------------------------------------------------------------------------------------------------

举个例子打电话时同步发消息是异步

 

17 52RD网友(游客发表于 2008-11-10 17:32:00 

  有两个方面的同步问题:一方面是基础的,即如何正确接收每一位,称为"位同步"每一位码元如何同步,即"位同步",要想做到位同步,需要两端时钟相同,而两端时钟总是有差别,一是时钟设定不一样,另一是即使时钟设定相同,但由于两端时钟有误差,这种误差很小,在几个码元的时间内不会产生影响,但这种误差是会积累的,在一定的时间后,这种误差就会对正确接受产生影响,因此,在两端对时完成之后,不见得就不会出错,由于误差的积累影响,就需要不断的对时间进行监视和调整,有一种方法是增加一条线,专门传输时钟信号,但一是要增加投资,二是传输也会有差错,所以不可靠。通常的方法是直接从信号中提取时钟信息,即自同步法,要用到数字锁相方法,即在接收信号的跳变上升沿产生一个校正脉冲,再和本地端时钟上升沿比较,由于本地对接收信号的采样是在本地端时钟上升沿对准接收信号的中间处,则校正脉冲和本地端时钟上升沿的相差小于码元周期的一半即可,如不满足这个条件,就把差别信息输入计数器,产生一个数量信息去控制分频器,从而产生一个正确的时钟信号。这样每位码元能够正确接收。(从数字锁相的角度看,数字信号的码型很重要,NRZ在发送一长串"1""0"时没有跳变,不易于提取时钟信号,而曼彻斯特码每个码元中间有跳变,则易于提供时钟信息,易于同步)另一方面是从内容上来说的,是内容的同步,信息的同步,而上面的位同步是物理上的同步,在数字数据中,信息是由一系列二进制代码组合表示的,实际中,通常是由若干个码元组成一个码元块,称为一个"",由若干个字组成一个数据块,称为"",数据帧可以作为数据传输的单位。要正确接收信息,就要正确识别数据帧,要正确识别数据帧,需要确定帧的首尾,如果起点搞错了,虽然正确的接收了一串代码,但这段代码表示的信息不是原数据帧的信息,接收就失败了,所以,要正确识别帧的起点对应的码元,再按照数据帧规定的长度接收后续码元,才能正确接收数据帧,此即"帧同步"。帧同步的实现方法通常是在一长串信息字前加上一个字(或几个),这个字称为"同步字",是特别规定的(通常有一定的规律),接收端不断的检测收到的代码,一旦发现同步字,就是找到了帧的起点,然后接收后面的信息字,为正确接收信息字的各个码元(位),要用到位同步技术。另外,当帧的长度很短时,特殊的情况是只有一个字符,即一个字符组成的数据(帧),实现上有所不同,第一是不用同步字,太划不来,第二是接收数据位不用位同步技术,因为只有几个码元,积累误差小,字的首尾使用起始位和停止位表示,字符与字符之间是空闲位,接收端检测到起始位就是字符的开始,在起始位要校准时钟。这种"帧同步"因为只有一个字符,所以也称"字同步",也称"起止式同步",由于字符之间的空闲时间不等,也称为"异步通信方式",而把前一种称为"同步通信方式"位同步是保证正确接收码元是比特同步,帧同步是保证正确接收信息,是信息同步。仅仅只有位同步是没有意义的,因为位同步不能让我们直接识别信息,只有帧同步才能接受准确信息,而准确接收信息的前提是每一位正确的接收,所以,位同步是帧同步的基础,是帧同步的一部分技术。我们说的数据通信的"同步"问题实际上就是"帧同步"。另外,我们常说的同步传输和异步传输,是帧同步的两种不同手段,或不同情况。(所以,一般的教材中说同步问题,就只说同步和异步传输方式,实际上就是帧同步(狭义的,指同步传输)和字同步(指异步传输),字同步是特殊的帧同步,在起点校准时钟,其他位不须使用位同步技术,因为码元数量少,在起点校准时钟后,一个字符时间内积累误差不大). 可以想象通信的开始过程,接受方实际上是在找""的起始,这是通信的目的,位同步是为这个目的服务的。from:http://www.cnblogs.com/JeffChen/archive/2007/04/13/711969.html  

 

三、同步和异步的区别(3

 

最近有朋友问题这个概念,小弟发现自己也不清楚,所以过来请教一下各位大侠:   

  异步/同步     阻塞/非阻塞  的概念有多少区别?或者说,是否存在对应关系?我的想法是:   

  阻塞  代表着在调用后等待调用的返回,因此会将调用者和被调用者两个进程/线程进行一定意义上的协调,因此与   同步  对应   

  而异步  调用的返回结果通常通过信号/回调机制实现,不会发生等待调用返回的情况,因此应该是非阻塞的   

  不知道这个理解是不是有错误

可以这样理解:异步/同步是对处理代码的逻辑说的,阻塞/非阻塞是对调用接口说的,通常要调用一个阻塞式的接口,调用代码的逻辑会采用同步处理方式,对于非阻塞式的接口,调用代码采用异步逻辑。   

    

  但有时候也会发生用同步方式调用非阻塞接口,用异步方式调用阻塞接口的情况

 

四、操作系统中的同步、异步、阻塞和非阻塞(4

在进行网络编程时,我们常常见到同步、异步、阻塞和非阻塞四种调用方式。这些方式彼此概念并不好理解。下面是我对这些术语的理解。 

  同步 

  所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等)。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。最常见的例子就是 SendMessage。该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。当对方处理完毕以后,该函数才把消息处理函数所返回的 LRESULT值返回给调用者。 

  异步 

  异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。以CAsycSocket类为例(注意,CSocketCAsyncSocket派生,但是起功能已经由异步转化为同步),当一个客户端通过调用 Connect函数发出一个连接请求后,调用者线程立刻可以朝下运行。当连接真正建立起来以后,socket底层会发送一个消息通知该对象。 

  这里提到执行部件和调用者通过三种途径返回结果:状态、通知和回调。可以使用哪一种依赖于执行部件的实现,除非执行部件提供多种选择,否则不受调用者控制。如果执行部件用状态来通知,那么调用者就需要每隔一定时间检查一次,效率就很低(有些初学多线程编程的人,总喜欢用一个循环去检查某个变量的值,这其实是一种很严重的错误)。如果是使用通知的方式,效率则很高,因为执行部件几乎不需要做额外的操作。至于回调函数,其实和通知没太多区别。 

  阻塞 

  阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。 

  有人也许会把阻塞调用和同步调用等同起来,实际上他是不同的。对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已。例如,我们在CSocket中调用Receive函数,如果缓冲区中没有数据,这个函数就会一直等待,直到有数据才返回。而此时,当前线程还会继续处理各种各样的消息。如果主窗口和调用函数在同一个线程中,除非你在特殊的界面操作函数中调用,其实主界面还是应该可以刷新。 

  socket接收数据的另外一个函数recv则是一个阻塞调用的例子。当socket工作在阻塞模式的时候,如果没有数据的情况下调用该函数,则当前线程就会被挂起,直到有数据为止。 

  非阻塞 

  非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。 

  对象的阻塞模式和阻塞函数调用 

  对象是否处于阻塞模式和函数是不是阻塞调用有很强的相关性,但是并不是一一对应的。阻塞对象上可以有非阻塞的调用方式,我们可以通过一定的API去轮询状态,在适当的时候调用阻塞函数,就可以避免阻塞。而对于非阻塞对象,调用特殊的函数也可以进入阻塞调用。函数select就是这样的一个例子。

转自:http://hi.baidu.com/msingle/blog/item/eb434f2ada43c2225343c129.html


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值