异步回调和同步回调
2015-08-06 14:39
267 查看
参考链接:
http://blog.csdn.net/hj506454725/article/details/6340101 http://www.cnblogs.com/zcw-ios/articles/2543515.html
软件模块中存在一定接口,从调用方式上分为三类
1、同步调用;2、回调;3、异步调用
首先,同步调用是一种阻塞式调用,调用方要等待对象执行完毕才返回。它是一种单向调用。
其次,回调是一种双向调用模式,也就是说,被调用方在接口被调用得同时会调用对方得接口。
最后,异步调用是一种类似消息或者事件的机制,不过它的调用方向刚好相反,接口的服务在收到被调用的信息或事件时,会主动调用(调用方)的接口。
回调和异步调用得关系非常紧密,通常我们使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。
对于不同类型的语言(结构化语言和对象语言)、平台(win32,jdk)等,客户和服务的交互除了同步方式以外,都需要具备一定的异步通知机制,让服务方或接口提供方,在某些情况下能主动通知客户,而回调是实现异步的一个最简捷的途径。
结构化语言中,可以通过回调函数还实现回调,回调函数也是一个函数或过程,不过它是一个由调用方自己实现,供被调用方使用的特殊函数。
在面向对象语言中,回调则是通过接口或抽象类来实现的,我们把实现这种接口的类称为回调类,回调类的对象称为回调对象。对于象C++或objectPascal这些兼容了过程特性的对象语言,不仅提供了回调对象、回调方法等特性,也行兼容过程语言的回调函数机制。
http://hi.baidu.com/zhuyipeng/blog/item/863fefdb7c736c63d1164eec.html来自
http://blog.csdn.net/hj506454725/article/details/6340101 http://www.cnblogs.com/zcw-ios/articles/2543515.html
异步回调就是发起请求后,不等待响应就先去处理自己的响应,它不是处理整个请求,只是处理一小部分,在Web页上就表现为页面没刷新,却局部更新了数据。 相对于同步就是必须等到响应该请求后才能做别的事,具体到Web页就是整个页面刷新了,数据才更新。 下面举两个列子: 首先举个同步调用的例子: 比如你的程序调用了一个方法,这个方法要执行很长很长时间,而且这个时间都不确定,传统的办法就是“同步调用”,如下: private int Func() { // 这个方法要执行很长时间,并且返回一个int的值。 } private void A() { int n = Func(); textBox1.Text = n.ToString(); // 这里得到的n就是Func执行出来的结果,并且显示在textBox1中。 } 采用上述方法,可以叫做同步调用,很明显它有一个缺点: Func方法执行的时间过长,程序会阻塞,并且无法继续执行其他的代码,给用户的体验就是整个程序都会僵着,打开任务管理器会提示该程序没有响应,用户以为程序死了,就会手动结束这个程序, 而异步调用就不一样,在调用完Func这个方法后,不必等待Func执行完,就可以执行其他的代码,直到Func执行完,才把结果返回, 如果Func提供了异步方法FuncAsync(),就可以这样调用: private void A() { FuncAsync(); // 这里执行FuncAsync方法,并不会阻塞,程序会在后台执行完FuncAsync方法后,自动调用FuncCompleted方法,并且把结果传过去。 } private void FuncCompleted(int n) { textBox1.Text = n.ToString(); // 参数n就是异步回调返回的结果, } 异步回调需要编写代码才能支持,网络传输方面的类库一般都提供异步方法,如socket编程,web服务,ajax,wcf等,有些异步是同一个线程完成的,有些异步是不同的线程,所以回调函数里要更新控件都会提示跨线程访问控件的错误提示。
软件模块中存在一定接口,从调用方式上分为三类
1、同步调用;2、回调;3、异步调用
首先,同步调用是一种阻塞式调用,调用方要等待对象执行完毕才返回。它是一种单向调用。
其次,回调是一种双向调用模式,也就是说,被调用方在接口被调用得同时会调用对方得接口。
最后,异步调用是一种类似消息或者事件的机制,不过它的调用方向刚好相反,接口的服务在收到被调用的信息或事件时,会主动调用(调用方)的接口。
回调和异步调用得关系非常紧密,通常我们使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。
对于不同类型的语言(结构化语言和对象语言)、平台(win32,jdk)等,客户和服务的交互除了同步方式以外,都需要具备一定的异步通知机制,让服务方或接口提供方,在某些情况下能主动通知客户,而回调是实现异步的一个最简捷的途径。
结构化语言中,可以通过回调函数还实现回调,回调函数也是一个函数或过程,不过它是一个由调用方自己实现,供被调用方使用的特殊函数。
在面向对象语言中,回调则是通过接口或抽象类来实现的,我们把实现这种接口的类称为回调类,回调类的对象称为回调对象。对于象C++或objectPascal这些兼容了过程特性的对象语言,不仅提供了回调对象、回调方法等特性,也行兼容过程语言的回调函数机制。
http://hi.baidu.com/zhuyipeng/blog/item/863fefdb7c736c63d1164eec.html来自
相关文章推荐
- 省市地区三级联动弹出层Jquery特效
- iOS之NSMutableDictionary导致程序崩溃:'NSInternalInconsistencyException'
- org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update at org.hibernate.
- DESede对称加密算法工具类
- 腾讯小记-第一周
- SmartCard-3 API Description(API 描述)
- SmartCard-2 Architecture(架构)
- SmartCard-1 Terminology(术语)
- Android图片操作-加水印
- Android图片操作-保存图片格式
- Android图片操作-获得倒影图片
- Android图片操作-将Drawable转化为Bitmap
- 关于REST的文章—— 如何查看我的订单-REST的流程API设计案例
- Android图片操作-获得圆角图片
- Android图片操作-放大缩小
- Android图片操作-剪切
- Android图片操作-保存图片到SD卡
- Android图片操作-生成缩略图
- Android图片操作-合并图片
- Android图片操作-截屏