c++26的std::execution并行模型将如何演进? (Sender/Receiver)

C++26 不引入 std::execution 且不将 Sender/Receiver 模型纳入标准库;并行算法仍使用 C++17 的 std::execution::seq/par/par_unseq 策略,Sender/Receiver 仅作为 TS 候选推迟至 C++29 或更晚。

C++26 不会引入 std::execution,也不会把 Sender/Receiver 模型塞进标准库的并行算法中——这个模型已被明确移出 C++26 工作计划。

std::execution 这个名字在标准草案中曾短暂出现过(C++20 后期、C++23 早期),但最终被弃用;它从未进入任何正式标准版本。你查不到它的文档,也链接不到它的头文件,因为根本不存在。

Sender/Receiver 没进 C++26 标准库

Sender/Receiver 是为异步计算建模的一套原语,目标是替代 std::future 和补全协程生态,不是专为 std::for_each 这类并行算法设计的。

  • C++26 的并行算法仍基于 std::execution::par / std::execution::par_unseq 等执行策略

    (来自
  • Sender/Receiver 目前仅作为独立的技术规范(P2300R7)推进,状态是「TS 候选」,但未被纳入 C++26 CD(Committee Draft)
  • ISO C++ 会议已决定将其推迟到 C++29 或更晚——主要障碍是实现成熟度不足、与现有并发设施(如 std::jthreadstd::stop_token)整合路径不清晰

你现在能用的并行执行策略仍是 C++17 定义的那一套

所有带 ExecutionPolicy 参数的算法(如 std::sortstd::transform)在 C++26 中行为不变,底层依赖的是实现提供的线程池或 OS 级并行支持:

#include 
#include 
#include 

std::vector v = {/ ... /}; std::sort(std::execution::par, v.begin(), v.end()); // 依然有效,且语义没变

  • std::execution::seq:顺序执行(默认)
  • std::execution::par:允许跨线程并行,但保持数据依赖顺序
  • std::execution::par_unseq:允许向量化 + 跨线程并行,对用户代码有严格要求(不可含原子操作、锁、I/O 等)
  • 没有 std::execution::unseq 单独存在;它只作为 par_unseq 的一部分起作用

想试 Sender/Receiver?得靠第三方或实验性实现

标准库不提供,但你可以通过以下方式接触实际代码:

  • libunifex(Facebook 开源):最成熟的参考实现,已用于生产级异步 I/O 框架
  • cppcoro(Lewis Baker):部分支持 Sender 概念,侧重协程集成
  • MSVC 19.38+ 和 GCC 14(with -fconcepts)能编译基础 Sender 示例,但无标准头文件,需自行引入第三方头
  • 别指望 #include std::sender ——它们不存在

C++ 并发演进的真实节奏比宣传慢得多。Sender/Receiver 是重要方向,但它现在仍属于“可研究、可实验、不可依赖”的范畴。真正影响你今天写代码的,还是 std::jthreadstd::atomic_refstd::span 这些已落地的特性。