同步调用,回调,异步调用
来源:互联网 发布:cpu硅脂品牌 知乎 编辑:程序博客网 时间:2024/05/16 05:29
同步调用
同步调用:阻塞式调用。
举个栗子:
A B C D 四个烽火台,需要传递消息。顺序是A->B->C->D。消息需要逐个传递,因此时间主要消耗在了等待上。
回调
回调:双向调用的方式。
举个栗子:
依旧是A B C D四个烽火台,顺序依然是A B C D,假设烽火台多了一位士兵,在A接收到信息而还没有点燃烽火的时候,可以先将士兵派出,这个士兵即是“回调函数“。 此时,先执行回调函数,再执行后面的。
即:
回调: 在函数的参数列表中添加一个其他函数的指针,需要的时候直接调用这个函数即可。
typedef void (*pcb)(char *);void getCallback(pcb callback){ ...}void fCallback(char *s){ ...}getCallback(fCallback); //参数传递,函数指针
调用规范:
三个: (默认为 _cdecl)
- _cdecl
- _stdcall
- _pascal
不同的调用规范之间不能相互赋值,即使有相同的返回值以及参数列表。
异步调用
异步调用: 类似于消息,不过方向相反而已。当接口的服务接收到消息 或 事件发生时,去主动通知调用客户方。 (即通知调用客户方的接口)
举个栗子:
依旧是 A B C D四个烽火台,此时增加一个官员 F, F将消息分别告诉A B C D 而不必等待 A B C D各自返回。 当 A B C D各自完成的时候就会通知 F , F 收到四个完成的消息之后,就知道整个过程完成了。
写个伪代码模拟下过程:
/* 同步调用 */auto signal = false;while (!signal) signal = wait(A.light());signal = false;while (!signal) signal = wait(B.light());signal = false;while (!signal) signal = wait(C.light());signall = false;while (!signal) signal = wait(D.light());complete!
/* 回调 */void light_tower(A, callback){ callback(); //先执行回调 A.light();}void callback(){ B.light();}
/* 异步调用 */A.light() { this.light(); this.while_complete(this.tell(F));}B.light() { this.light(); this.while_complete(this.tell(F));}C.light() { this.light(); this.while_complete(this.tell(F));}D.light() { this.light(); this.while_complete(this.tell(F));}
0 0
- 同步调用 回调 异步调用
- 同步调用,回调,异步调用
- 同步调用、异步调用
- 同步调用和异步调用
- 同步调用和异步调用
- 同步调用与异步调用
- 同步调用与异步调用
- 同步调用和异步调用
- 同步调用与异步调用
- 同步调用与异步调用
- 同步和异步调用
- ajax同步异步调用
- 异步调用同步返回
- 软件中的1、同步调用;2、回调;3、异步调用
- 同步调用和异步调用(zt)
- 委托的异步调用和同步调用
- 同步调用WebService和异步调用WebService
- 同步调用、回调和异步调用区别
- 在64位操作系统上使用FlashDevelop的Debug功能
- java实现录音并保存到本地文件
- linux at91看门狗驱动设置
- 阿里云服务器ubuntu创建SVN版本控制服务器
- LeetCode 之Edit Distance
- 同步调用,回调,异步调用
- python map函数用法
- jvm相关参数,调优
- 数据库设计问题解决
- 关于AbsListView$RecycleBin.addScrapView的数组越界
- HDU 5301_Buildings
- Remove Linked List Elements
- 基础-数学-最大后验概率(MAP)maximum a posteriori
- 树-堆结构练习——合并果子之哈夫曼树