news 2026/4/16 13:38:31

我用std::async写了5年,直到发现它是C++最大的设计失误

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
我用std::async写了5年,直到发现它是C++最大的设计失误

std::async出来的时候,我以为C++终于有了像样的异步编程支持。

用了一段时间后发现不对劲。任务明明提交了,程序却卡住了。调试半天,发现是future析构的时候在等待任务完成。什么异步?这分明是假异步。

后来看了Scott Meyers的《Effective Modern C++》,Item 38专门讲了这个问题,用了一个词:surprising behavior。我觉得太客气了。这就是设计失误。

从C++11的std::async,到C++20的协程,再到C++26即将到来的std::execution,C++异步编程走了15年,终于要走上正轨。这篇文章把这条路完整梳理一遍,让你知道异步编程该怎么写,为什么该那么写。


一、异步编程的本质:我们到底在解决什么问题?

先说清楚一个问题。异步编程到底在解决什么?

很多人会说"提高性能"。没错,但不够准确。更准确的说法是:让CPU不要傻等

举个例子。你写了一个网络服务器,每来一个请求就要查数据库,查数据库需要10毫秒。这10毫秒CPU在干嘛?在等。数据库返回之前,CPU什么也做不了,就干等着。

如果同时来了1000个请求呢?按同步的写法,你需要1000个线程,每个线程等10毫秒。1000个线程,光线程栈就要消耗好几个GB内存,线程切换的开销也不小。

异步编程的核心思想就是:把等待变成通知

同步模式下,代码是这样的:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 16:19:03

学霸同款9个AI论文写作软件,MBA论文轻松搞定!

学霸同款9个AI论文写作软件,MBA论文轻松搞定! AI工具如何助力论文写作,让学术之路更轻松 在当今快节奏的学术环境中,MBA学生和研究者面临着越来越高的论文写作压力。从选题到开题,从初稿撰写到最终定稿,每一…

作者头像 李华
网站建设 2026/4/16 12:14:48

​ Android 基础入门教程​Date Time组件(下)

2.4.3 Date & Time组件(下) 分类 Android 基础入门教程 本节引言: 本节我们来继续学习Android系统给我们提供的几个原生的Date & Time组件,他们分别是: DatePicker(日期选择器),TimePicker(时间选择器),Cale…

作者头像 李华
网站建设 2026/4/16 11:04:17

为什么你的UE6项目必须立即支持C++26?,90%团队忽视的性能红利

第一章:为什么UE6项目必须立即拥抱C26随着Unreal Engine 6正式支持C26标准,开发者迎来了前所未有的性能优化与语言表达能力提升。C26不仅引入了模块化系统(Modules)的最终形态,还增强了协程、反射和元编程能力&#xf…

作者头像 李华
网站建设 2026/4/16 12:46:25

C++26任务调度新纪元(std::execution架构深度剖析)

第一章:C26任务调度新纪元:std::execution架构概览C26即将引入全新的std::execution架构,标志着并发与并行编程进入标准化、可组合的新阶段。该设计旨在统一现有执行策略(如std::launch::async)和第三方库(…

作者头像 李华
网站建设 2026/4/15 18:48:55

大模型推理显存优化秘籍(从KV Cache压缩到PagedAttention)

第一章:大模型推理显存优化的挑战与机遇随着大模型参数规模突破千亿级别,推理阶段的显存占用已成为部署落地的核心瓶颈。高分辨率缓存、中间激活值和权重加载共同导致GPU显存需求急剧上升,限制了低资源环境下的应用扩展。显存瓶颈的主要来源 …

作者头像 李华