news 2026/8/22 13:42:41

我用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/8/21 11:55:13

计算机毕设Java苗木交易互助网站 基于Java的苗木交易互助平台设计与实现 Java技术驱动的苗木交易互助管理系统开发

计算机毕设Java苗木交易互助网站l6l169 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着信息技术的飞速发展,传统的苗木交易管理方式逐渐暴露出效率低下、信息不透…

作者头像 李华
网站建设 2026/8/21 11:55:12

智能重构新范式:AI如何破解Java遗留系统改造难题

在企业数字化转型进程中,Java遗留系统的现代化改造始终是技术团队面临的重要挑战。传统重构过程中,开发人员需要应对代码结构复杂、文档缺失、技术债务累积等多重障碍,这些因素显著增加了项目风险和开发成本。遗留系统重构的核心挑战技术债务…

作者头像 李华
网站建设 2026/8/21 11:56:44

渲染引擎多线程优化避坑指南(资深架构师亲授10年踩坑经验)

第一章:渲染引擎多线程优化的挑战与现状现代图形应用对实时性和性能的要求日益提升,渲染引擎作为核心组件,其多线程优化成为关键技术瓶颈。随着硬件多核架构的普及,传统单线程渲染模式已无法充分利用计算资源,导致CPU利…

作者头像 李华
网站建设 2026/8/21 11:57:46

【系统级编程必修课】:深入理解内存布局的7个关键维度

第一章:内存布局精确控制在系统级编程中,内存布局的精确控制是优化性能与确保硬件兼容性的关键。尤其是在操作系统开发、嵌入式系统或高性能计算场景中,开发者需要直接干预数据在内存中的排列方式,以满足对齐要求、减少缓存行冲突…

作者头像 李华
网站建设 2026/8/21 11:58:57

网工私活 2 万碾压月薪 1.5 万!同事劝我辞职单干

网工接私活竟比工资还高?工资1.5万,私活2万!同事:辞职干票大的! 小编作为一名在职的网络安全工程师行业的小小一员,在平时的工作中洞察到一线技术工程师其实还是有很多机会和时间去做一下私活。加上最近就…

作者头像 李华
网站建设 2026/8/21 11:55:17

4000余份数字化资料合集:AI大模型及行业应用方案、企业数字化、数据中台、数据要素、数据资产、数据治理、数字化转型、IT信息化

(AI大模型及行业应用方案、企业数字化、数据中台、数据要素、数据资产、数据治理、数字化转型、IT信息化、行业数字化方案及报告等)层次一:底层基石与生产要素这是数字世界的“石油”和“土地”。数据要素: 最根本的认知革命。这是…

作者头像 李华