c++ c++26 aot aot aot c++标准库的std::execution如何使用

冬伟酱_7517

冬伟酱_7517

2026-03-19

512人浏览

原创

c++oding="utf-8" ?>

std::execution 在 c++26 中并不存在,它仅是 c++17 引入的并行算法执行策略(如 seq、par、par_unseq),不提供执行器或调度器抽象,所有所谓“c++26 新特性”均属误传。

c++ c++26 aot aot aot c++标准库的std::execution如何使用

std::execution 在 C++26 中还不存在

它根本没进标准。C++23 是当前最新正式标准,C++26 尚在草案阶段(ISO/IEC PDTS 23979),而 std::execution 这个命名空间——连同 std::execution::par、std::execution::seq 等执行策略——早在 C++17 就已存在,但仅作为 std::for_each、std::sort 等并行算法的参数类型,不提供独立调度或执行器抽象。

常见错误现象:std::execution::task_block 或 std::execution::executor 编译失败;搜索“C++26 execution”后误以为新特性已落地,结果发现头文件不识别、文档链接 404。

  • C++17 引入的是 std::execution::sequenced_policy 等策略类型,不是运行时执行器
  • C++23 没新增执行模型,只微调了并行算法约束和异常传播行为
  • PDTS 23979(C++26 草案)里确实提到了 “execution primitives”,但全是提案编号(如 P2300R7 的 std::execution 重构),未合并进标准正文
  • 所有主流编译器(GCC 14、Clang 18、MSVC 19.39)均不支持所谓“C++26 std::execution”新接口

现在能用的 std::execution::xx 都是 C++17 并行策略

它们只是枚举式标签,告诉算法“你允许怎么并发”,不启动线程、不管理队列、不处理依赖。真正干活的是标准库实现(比如 libstdc++ 用 pthread / TBB,libc++ 用 Intel TBB 或自研线程池)。

使用场景:加速已知可并行的 CPU 密集型操作,比如大数组排序、向量归约、图像像素遍历。

  • std::execution::seq:强制顺序执行(单线程,无开销)
  • std::execution::par:允许任意并发(可能用多线程,也可能退化为 seq)
  • std::execution::par_unseq:允许并发 + 向量化(SIMD,对数据布局敏感)
  • 必须显式传给算法,如 std::sort(std::execution::par, first, last, comp);不传就是顺序版

性能影响:用 par 不一定更快——小容器、廉价比较函数、缓存不友好访问模式下,线程启动/同步开销反而拖慢;建议先测 seq 基线,再比 par。

C++ Code Review Master
C++ Code Review Master

组合式C++代码评审方案,融合静态分析、AI推理、多轮迭代评审和C++专项检查,适用于PR审查、增量代码审查、全项目评审和代码质量评分,触发词包括review cpp、cpp代码评审、C++review、代码审查。

下载

想写 AOT 友好的并行代码?别碰 std::execution 策略

AOT(Ahead-of-Time)编译环境(如嵌入式、iOS、某些游戏引擎构建链)通常禁用动态线程创建、限制 STL 的并发实现。而 std::execution::par 的行为高度依赖运行时线程池,libstdc++ 默认用 std::thread,libc++ 依赖外部 TBB —— 这些在 AOT 场景下往往不可控或被裁剪。

容易踩的坑:

  • 静态链接时漏掉 TBB 库 → 运行时报 undefined symbol: _ZNSt3__119__tbb_backend_impl14__execute_taskEPv
  • iOS 构建开启 -D_GLIBCXX_PARALLEL → 直接编译失败(Apple Clang 不支持)
  • 裸机或 freestanding 环境包含 <execution></execution> → 头文件存在但策略对象定义为空,链接时报错
  • 用 par_unseq 但数据未按 32 字节对齐 → SIMD 指令触发 SIGBUS

替代做法:显式用 std::thread + std::vector<:thread></:thread> 分块,或选轻量级并行库(如 OpenMP 的 #pragma omp parallel for,AOT 兼容性好得多)。

std::execution 相关提案(P2300)和现实差距很大

P2300(“std::execution” 重构)想把执行器、发送器、接收器做成一等公民,类似 Rust 的 Executor 或 Swift 的 Task,但它仍处于 TS(Technical Specification)讨论阶段,连 C++26 的 feature testing macro(__cpp_lib_execution)都未启用。

现状:

  • 没有 std::execution::executor 类型
  • 没有 std::execution::schedule() 函数
  • 没有 sender/receiver 概念进入标准库头文件
  • 所有实验性实现(如 LLVM 的 libcxx 的 experimental/executors)都带 experimental:: 前缀,且 ABI 不稳定

如果你看到博客写“C++26 使用 std::execution::schedule() 启动异步任务”,那要么是混淆了提案编号,要么在跑非标准分支。真要跨平台 AOT + 异步,目前更靠谱的是自己封装 std::jthread 或用 Boost.Asio 的 thread_pool。

C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!

相关文章

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

c++

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

2026.03.03

797

16

Swift编程与iOS/macOS应用开发教程合集
Swift编程与iOS/macOS应用开发教程合集

面向苹果生态开发者,系统讲解 Swift 语言核心与 iOS/macOS 应用开发,涵盖 Swift 语法基础、Xcode 开发环境搭建与项目管理、SwiftUI 声明式 UI 开发、UIKit 与 SwiftUI 混合开发策略、Combine 响应式编程框架、数据持久化(SwiftData/Core Data/UserDefaults)、网络请求与 JSON 解析、App 签名/打包/TestFlight 测试与 App Store

2026.06.03

1142

14

C++系统编程内存管理_C++系统编程怎么与Rust竞争内存安全
C++系统编程内存管理_C++系统编程怎么与Rust竞争内存安全

C++系统编程中的内存管理是指 对程序运行时内存的申请、使用和释放进行精细控制的机制,涵盖了栈、堆、静态区等不同区域,开发者需要通过new/delete、智能指针或内存池等方式管理动态内存,以避免内存泄漏、野指针等问题,确保程序高效稳定运行。它核心在于开发者对低层内存有完全控制权,带来灵活性,但也伴随高责任,是C++性能优化的关键。

2025.12.22

86

5

Rust异步编程与Tokio运行时实战
Rust异步编程与Tokio运行时实战

本专题聚焦 Rust 语言的异步编程模型,深入讲解 async/await 机制与 Tokio 运行时的核心原理。内容包括异步任务调度、Future 执行模型、并发安全、网络 IO 编程以及高并发场景下的性能优化。通过实战示例,帮助开发者使用 Rust 构建高性能、低延迟的后端服务与网络应用。

2026.02.11

258

16

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

2026.03.05

602

19

Rust 系统编程入门与实战
Rust 系统编程入门与实战

统讲解近年最受关注的系统级编程语言 Rust 的核心知识体系,涵盖 Rust 的安装与 Cargo 项目管理、变量绑定与不可变性设计哲学、所有权(Ownership)/ 借用(Borrowing)/ 生命周期(Lifetime)三大核心概念、结构体/枚举与模式匹配(match)、Trait 特征系统与泛型编程、错误处理(Result/Option)、智能指针(Box/Rc/Arc)、并发编程的无畏并发(Fearless Concurre

2026.05.29

477

21

Rust异步网络服务与Tokio Runtime深度实践
Rust异步网络服务与Tokio Runtime深度实践

本专题围绕 Rust 在高并发网络服务中的应用展开,系统讲解 Tokio 异步运行时、任务调度模型、Future 执行机制以及高性能网络编程方式。结合实际服务端案例,帮助开发者构建低延迟、高可靠的异步服务架构。

2026.06.29

256

13

sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

2023.09.04

1138

7

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

2023.10.19

3108

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习