综合 · 新闻详情

Tokio/Rayon 陷阱以及为什么 Async/Await 无法实现并发

科技 · 社区 · Hacker News · 2026-07-16 · 重磅值 24.29
正文来源:原文正文机器翻译
原文链接:https://pmbanugo.me/blog/why-async-await-complect-concurrency

Tokio/Rayon 陷阱以及为什么 Async/Await 无法实现并发 2026 年 4 月 22 日 在过去的十年中,async/await 赢得了并发战争,因为它异常简单。它允许开发人员编写看起来与同步代码几乎相同的异步代码。但在这种熟悉的语法之下隐藏着巨大的结构复杂性。它隐藏了控制流,模糊了硬件现实,并最终将调度的负担推回到了开发人员身上。

Rich Hickey 在他的演讲《Simple Made Easy》中完美地阐述了这一点:“简单”是指熟悉且触手可及的事物,而“简单”则是结构上不混乱的事物 1 。

async/await 编写起来很容易,但是操作起来却非常复杂。

Rob Pike 在 2023 年 GopherConAU 演讲中谈到了这种架构转变:与 goroutine、channels 和 select 相比,async/await 对于语言实现者来说构建起来更容易、更小……但它把一些复杂性推回给程序员,通常会导致 Bob Nystrom 所说的“彩色函数”。

[...] 不过,重要的是,无论您提供什么并发模型,都只能执行一次,因为提供多个并发实现的环境可能会出现问题。

2 Pike 关于“多重并发实现”和 async/await 的评论正是当今生产中失败的地方。生产陷阱:混淆异步与并发 async/await 的基本陷阱在于它将异步(等待 I/O 时产生结果)与并发(同时处理多个事务)混为一谈。该语法是一个陷阱,因为它将交错状态机伪装成隔离的顺序线程。被这种错觉所迷惑,开发人员编写了一个异步函数,就像他们编写阻塞代码一样——通过网络获取数据库记录,

机器翻译/自动整理可能存在误差,请以原文为准。