news 2026/4/23 11:38:07

我用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/18 10:15:33

【芯片测试核心解析:故障模型深度揭秘与应用实践】

在集成电路制造中,纳米尺度的物理缺陷不可避免。为了确保芯片功能可靠性,故障模型作为测试理论基础和工程实践指南,成为芯片质量保障体系的核心环节。本文将深度解析各类故障模型的原理、检测方法及实际应用。一、故障模型基础概念与重要性&a…

作者头像 李华
网站建设 2026/4/18 6:09:01

【系统】MES系统全景分析

文章目录MES系统全景分析一、定义二、核心功能1、实时数据采集与监控2、生产计划与调度3、质量管理4、设备管理5、物料管理6、数据分析与报告三、技术架构四、行业应用五、MES软件在工业4.0/智能制造中的角色演变六、全球MES软件市场现状及主要厂商七、全球MES软件市场头部厂商…

作者头像 李华
网站建设 2026/4/19 0:50:10

【物联网设备C语言加密通信】:从零构建安全通信系统的5大核心步骤

第一章:物联网设备C语言加密通信概述在资源受限的物联网设备中,安全通信是保障系统完整性和数据隐私的核心环节。由于多数嵌入式设备计算能力有限、内存紧张,传统的高开销加密方案难以直接应用。C语言因其高效性与底层控制能力,成…

作者头像 李华
网站建设 2026/4/21 15:51:34

TensorRT与ONNX Runtime中的动态形状推理,你真的用对了吗?

第一章:TensorRT与ONNX Runtime中的动态形状推理,你真的用对了吗?在深度学习模型部署中,动态形状推理是实现灵活输入的关键技术。然而,在使用 TensorRT 和 ONNX Runtime 时,许多开发者并未正确配置动态维度…

作者头像 李华