当前位置:首页 > 每日看点

CPP26的exec模型你认为设计的如何?

卡卷网1年前 (2025-03-05)每日看点253

我觉得非常好。我第一时间能想到的有以下几个方面:

1、统一的异步模型,thread pool、GPU等这种资源调度以后都有了统一的调度接口,第三方库之间相互集成也变得更加方便。不仅仅是抽象出了scheduler/sender/receiver之类的接口,还封装了一些常用的异步算法,像when_all之类的,大大简化了异步代码的编写。

以前老有人问为什么STL中没有thread pool,其实只要就是因为C++还没有统一的异步模型,即使想要提供thread pool也没法确定需要提供什么样的api接口。现在不一样了,哪怕第三方的各种thread pool也可以轻松按照execution的模型来适配,stdexec里面就适配了好几个thread pool,包括tbb、asio等等:

CPP26的exec模型你认为设计的如何?  第1张

链接:

github.com/NVIDIA/stdex

2、协程和传统异步的高度统一,两种调用方式给你选择。协程方式主要是代码编写简单、可读性好,sender方式主要是可移植性更强,且性能更高。execution中的sender很容易就能支持co_await。

stdexec的文档中的这个例子:

CPP26的exec模型你认为设计的如何?  第2张

我把它协程,就变成这样:

#include <stdexec/execution.hpp> #include <exec/static_thread_pool.hpp> #include <exec/task.hpp> #include <print> exec::task<std::tuple<int, int, int>> Work(auto& scheduler) { auto fun = [](int i) { return i*i; }; auto work = stdexec::when_all( stdexec::on(scheduler, stdexec::just(0) | stdexec::then(fun)), stdexec::on(scheduler, stdexec::just(1) | stdexec::then(fun)), stdexec::on(scheduler, stdexec::just(2) | stdexec::then(fun)) ); co_return co_await work; } int main() { exec::static_thread_pool pool(3); auto scheduler = pool.get_scheduler(); auto work = Work(scheduler); auto [tp] = stdexec::sync_wait(std::move(work)).value(); // expect(tp == std::tuple<int, int, int>(0, 1, 4)); }

3、应用structured concurrency思想,并将其推向新的高度。作为asio的粉丝,我觉得asio输得不冤。asio::co_spawn是不符合structured concurrency思想的:

CPP26的exec模型你认为设计的如何?  第3张

youtube上有好几个关于Structured Concurrency思想的不错的视频,如果你只想看一个,我推荐这个:

youtube.com/watch?

90年代C++凭借STL+上百种算法取得了非常强大的竞争力。C++26的execution就是并行并发编程时代的STL,在所有编程语言里面继续领先,甚至遥遥领先。

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2025/03/11638.html

分享给朋友:

相关文章

你是如何在不依靠工资收入的情况下赚到一万元的?

你是如何在不依靠工资收入的情况下赚到一万元的?

分享几个路子稳,门槛低,变现快,适合年轻人的靠谱的副业。绝对不是送外卖、滴滴、搬砖等等的苦力活,这几个副业都是能是性价比极高,还能让你快速成长的工作。 想通过副业实现暴富、立马月入过万的同学,建议速速划走。 今天撇哥就给大家分享 100+个…

在 Istio、Linkerd 和 Cilium 之间,哪种服务网格在性能上表现最佳?

在 Istio、Linkerd 和 Cilium 之间,哪种服务网格在性能上表现最佳?

在讨论服务网格之前,先理解一下为什么我们需要它。现代微服务架构意味着将应用拆分为多个小型、独立的服务,这些服务可以独立开发、部署和扩展。然而,服务之间的通信和管理成了巨大的挑战,例如如何保证安全的通信、负载均衡、监控与可观测性等。服务网格…

无人机真的是中国领先吗?

无人机真的是中国领先吗?

巧了这是。 捡到了一台大疆。应该是别人飞丢的。在草丛中泡过水,轴承锈死,电池鼓涨已,经没有维修价值了。但作为玩电子的,免不了要把它解剖,研究一番。那么,我们看看它的国产化率能有多少吧。图片说话: 解释一下吧。…

拼多多,怎么就成为了年轻人的「赛博菜市场」?

拼多多,怎么就成为了年轻人的「赛博菜市场」?

可惜你不在拼多多买水果蔬菜,很难一句话跟你解释,我只能笨拙的用经历来慢慢讲。 我们公司有微波炉,同事们几乎都是自己带饭来上班,便当荤素搭配、水果零食;都是好看又好吃。 我自己本来就不喜欢外卖,当然也加入了带饭大军: 直到某一天深夜我闲着…

客观的讲,华为是不是真的遥遥领先?

客观的讲,华为是不是真的遥遥领先?

最近,华为上市了最新款的三折叠屏手机,于是很多大V们把这款手机吹上了天,吹成是技术上遥遥领先于全世界。谁要是敢质疑华而不实,就会被人扣上一顶汉奸卖国贼美狗的帽子。把一个商品捧成了宗教和菩萨,你只能说好,不能说不好。其实这个世界上,只要是人和…

鸿蒙系统到底是不是安卓系统?

你好,是的。 接下来我给不懂技术的人简单的说一下哄蒙系统的来龙去脉。 首先你要知道什么是开源。 ‌‌开源 (Open Source)全称为开放源代码‌,意味着任何人都可以获取和使用软件的源代码,并在遵守版权协议的前提下进行修改和再发布。‌1…

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。