软件模块中存在一定接口,从调用方式上分为三类
1、同步调用;2、回调;3、异步调用
首先,同步调用是一种阻塞式调用,调用方要等待对象执行完毕才返回。它是一种单向调用。
其次,回调是一种双向调用模式,也就是说,被调用方在接口被调用得同时会调用对方得接口。
最后,异步调用是一种类似消息或者事件的机制,不过它的调用方向刚好相反,接口的服务在收到被调用的信息或事件时,会主动调用(调用方)的接口。
回调和异步调用得关系非常紧密,通常我们使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。
对于不同类型的语言(结构化语言和对象语言)、平台(win32,jdk)等,客户和服务的交互除了同步方式以外,都需要具备一定的异步通知机制,让服务方或接口提供方,在某些情况下能主动通知客户,而回调是实现异步的一个最简捷的途径。
结构化语言中,可以通过回调函数还实现回调,回调函数也是一个函数或过程,不过它是一个由调用方自己实现,供被调用方使用的特殊函数。
在面向对象语言中,回调则是通过接口或抽象类来实现的,我们把实现这种接口的类称为回调类,回调类的对象称为回调对象。对于象C++或objectPascal这些兼容了过程特性的对象语言,不仅提供了回调对象、回调方法等特性,也行兼容过程语言的回调函数机制。
附1:
软件、硬件、通信中的同步和异步
在计算机系统中,由于资源有限而导致了进程之间的资源竞争和共享,因此,进程的并发执行不仅仅是用户程序的执行开始时间的随机性和提高资源利用率的结果,也是资源有限性导致资源的竞争与共享对进程的执行过程进行制约所造成的。
一、进程同步与异步执行
1.进程同步
就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。最常见的例子就是sendmessage。该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。当对方处理完毕以后,该函数才把消息处理函数所返回的lresult值返回给调用者。
2.进程异步
当一个异步过程调用发出后,调用者不需要等待得到结果,接着继续往下执行。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。
以casycsocket类为例(注意,csocket从casyncsocket派生,但是其功能已经由异步转化为同步),当一个客户端通过调用connect函数发出一个连接请求后,调用者线程立刻可以朝下运行。当连接真正建立起来以后,socket底层会发送一个消息通知该对象。
二、同步与异步传输:
1. 异步传输
通常,异步传输是以字符为传输单位,每个字符都要附加 1 位起始位和 1 位停止位,以标记一个字符的开始和结束,并以此实现数据传输同步。所谓异步传输是指字符与字符(一个字符结束到下一个字符开始)之间的时间间隔是可变的,并不需要严格地限制它们的时间关系。起始位对应于二进制值 0,以低电平表示,占用 1 位宽度。停止位对应于二进制值 1,以高电平表示,占用 1~2 位宽度。一个字符占用 5~8位,具体取决于数据所采用的字符集。例如,电报码字符为 5 位、ASCII码字符为 7 位、汉字码则为8 位。此外,还要附加 1 位奇偶校验位,可以选择奇校验或偶校验方式对该字符实施简单的差错控制。发送端与接收端除了采用相同的数据格式(字符的位数、停止位的位数、有无校验位及校验方式等)外,还应当采用相同的传输速率。典型的速率有:9 600 b/s、19.2kb/s、56kb/s等。
异步传输又称为起止式异步通信方式,其优点是简单、可靠,适用于面向字符的、低速的异步通信场合。例如,计算机与Modem之间的通信就是采用这种方式。它的缺点是通信开销大,每传输一个字符都要额外附加2~3位,通信效率比较低。例如,在使用Modem上网时,普遍感觉速度很慢,除了传输速率低之外,与通信开销大、通信效率低也密切相关。
2. 同步传输
同步传输是以数据块为传输单位。每个数据块的头部和尾部都要附加一个特殊的字符或比特序列,标记一个数据块的开始和结束,一般还要附加一个校验序列 (如16位或32位CRC校验码),以便对数据块进行差错控制。所谓同步传输是指数据块与数据块之间的时间间隔是固定的,必须严格地规定它们的时间关系。
三、同步阻塞与异步阻塞:
同步是阻塞模式,异步是非阻塞模式。
同步:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。
异步:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。
附2:
window form中的UI控件异步事件调用顺序
http://blog.csdn.net/goodshot/article/details/41053743