news 2026/2/26 3:19:21

我用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/2/21 6:33:12

SWAP模型教程

SWAP模型是先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长…

作者头像 李华
网站建设 2026/2/16 14:42:42

【Vue】10 Vue技术——Vue 中的数据代理详解

文章目录前言一、什么是数据代理?二、数据代理的好处✅ 更加方便的操作数据三、数据代理的基本原理🔧 原理简述:四、代码演示与分析五、调试观察:数据代理的真实结构六、数据代理图解说明七、为什么需要数据代理?1. 提…

作者头像 李华
网站建设 2026/2/22 9:09:45

揭秘编译时代码生成:如何让程序自动写代码并提升性能300%

第一章:揭秘编译时代码生成的核心价值在现代软件开发中,编译时代码生成(Compile-time Code Generation)已成为提升开发效率与系统性能的关键技术。它通过在程序编译阶段自动生成重复性或模板化代码,减轻开发者负担&…

作者头像 李华
网站建设 2026/2/25 18:05:10

Python + FFmpeg 批量提取视频音频(支持 Windows / macOS / Linux)

在日常开发或音频处理场景中,我们经常需要从大量视频文件中批量提取音频,例如: 从课程视频中提取音频将短视频转为 MP3做语音识别 / 音频分析前处理 本文介绍一种 使用 Python 调用 FFmpeg 的通用方案,同时支持 Windows、macOS …

作者头像 李华