CONCEPT
回调
核心定义
回调是异步编程领域面向异步耗时操作的经典设计逻辑,指程序执行耗时操作时预先传入指定的回调函数,待耗时操作执行完成后,系统自动触发该回调函数并将操作结果作为参数传入,无需程序同步阻塞等待,是最早普及的异步逻辑实现方案之一。
通俗类比
回调机制可通过餐厅点餐取餐场景直观理解,对应关系如下:
- 用户到店点餐的动作,对应程序调用耗时函数的操作
- 餐厅给到用户的叫号器,对应回调机制本身
- 用户拿到叫号器后无需在柜台等待,可自由安排时间的状态,对应程序无需阻塞、可继续执行其他任务的特性
- 餐品制作完成后叫号器响铃通知的动作,对应耗时操作完成后系统触发回调的逻辑
- 用户听到叫号后到柜台取餐的动作,对应回调函数的执行,制作完成的餐品就是传入回调函数的操作结果
标准运行流程
回调的完整执行逻辑分为3个固定步骤:
- 传入回调函数:程序触发IO操作、网络请求等耗时逻辑时,将后续处理结果的自定义函数作为参数传入耗时接口
- 后台执行耗时操作:耗时逻辑转入后台线程/进程执行,主线程不阻塞,可继续处理其他业务逻辑
- 自动触发回调:耗时操作执行完成(包含成功、失败两种状态)后,系统自动调用预先传入的回调函数,将操作结果、错误信息等作为参数传入完成执行
适用场景
回调广泛应用于所有无需同步等待的耗时操作场景,典型场景包括:
- 本地文件加载、文件读写等磁盘IO操作
- 网络请求、远程接口调用等跨网络操作
- 数据库查询、缓存读写等存储操作
- 定时任务、UI事件监听等触发式逻辑
核心优势
相比同步阻塞的耗时操作处理方案,回调的核心优势包括:
- 避免程序主线程阻塞,无需浪费时间等待耗时操作完成
- 大幅提升CPU、IO等系统资源的利用效率,支持更高的并发处理能力
- 实现逻辑简单,是早期异步编程的主流实现方案,适配性强
边界与局限
回调方案存在明确的使用局限:当业务逻辑复杂度提升,多层回调嵌套时会出现回调地狱问题,代码可读性、可维护性大幅下降,后续行业衍生出Promise、async/await等异步编程方案来解决该问题。
相关条目
- 异步编程
- 回调地狱
- 网络请求
- IO操作