You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

协程与Promise/Future的区别是什么?async/await实现有何跨语言差异?

协程、Promise与async/await的区别与关联

首先明确:协程和Promise完全不是一回事,二者的定位和作用天差地别:

协程是什么?

协程是一种执行流控制机制,简单说就是能主动暂停、之后再恢复执行的函数。它属于编程语言的执行模型范畴,核心是让开发者能手动控制函数的执行节奏——比如在函数内部某个点暂停,把执行权交出去,等需要的时候再回来接着跑。比如Python里的async def定义的原生协程,就是典型例子。

Promise是什么?

Promise是异步操作的结果容器,属于异步编程的设计模式。它的作用是把异步任务的状态(等待中、成功完成、失败)和结果封装起来,避免回调嵌套。比如JS里的Promise,你创建它的时候,内部的异步逻辑会立刻执行,Promise只是帮你把后续处理结果的逻辑(.then()/.catch())串起来,它本身不控制执行流的暂停或恢复。


async/await到底实现的是哪一个?

不同语言的实现确实有差异,但本质是用协程风格的语法糖来简化异步结果容器(比如Promise)的处理:

  • 在JavaScript里:async函数本质上返回的就是Promise,await关键字是Promise链式调用的语法糖。它会让当前async函数的执行暂时“挂起”(其实是把后续逻辑包装成Promise的回调,交给事件循环处理),等目标Promise状态变更后,再继续执行函数剩下的部分。这里的“暂停恢复”是基于事件循环和Promise模拟出来的,并非原生协程的执行控制。
  • 在Python里:async/await是基于原生协程实现的。await后面必须跟“可等待对象”(比如asyncio.Task、asyncio.Future,它们的角色类似Promise,用来承载异步结果)。当执行到await时,协程会主动暂停,把执行权交还给事件循环,等可等待对象完成后,事件循环再调度这个协程恢复执行。这里的暂停恢复是原生协程机制的直接体现。

简单说:async/await不是单独实现Promise或协程,而是把两者结合起来,让异步代码写起来像同步代码一样直观。

内容的提问来源于stack exchange,提问作者nick_jj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 17:55:12