当前位置: 首页 > article >正文

2503C++,C++标准的执行

最优雅的应该是c++26刚刚引入的std::execution,通过sender/receiver模型和常用的异步算法来简化调用异步逻辑,还可随时改成协程.

#include <stdexec/execution.hpp>
#include <exec/static_thread_pool.hpp>
int main()
{exec::static_thread_pool pool(3);auto sched = pool.get_scheduler();auto fun = [](int i) { return i*i; };auto work = stdexec::when_all(stdexec::starts_on(sched, stdexec::just(0) | stdexec::then(fun)),stdexec::starts_on(sched, stdexec::just(1) | stdexec::then(fun)),stdexec::starts_on(sched, stdexec::just(2) | stdexec::then(fun)));auto [i, j, k] = stdexec::sync_wait(std::move(work)).value();std::printf("%d %d %d\n", i, j, k);
}

可直接改成协程:

#include <stdexec/execution.hpp>
#include <exec/static_thread_pool.hpp>
#include <exec/task.hpp>
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();assert(tp == std::tuple<int, int, int>(0, 1, 4));
}

当前stdexec库把std::execution实现得比较完整,如何实现自己的调度器的文档还不多,可直接用stdexec现成的设施就可完成需求:

执行库
其它的也还有现成又简单协程库可满足你的需求,如libfork:

#include "libfork/core.hpp"
inline constexpr auto fib = [](auto fib, int n) -> lf::task<int> {if (n < 2) {co_return n;}int a, b;co_await lf::fork[&a, fib](n - 1);//生成子任务.co_await lf::call[&b, fib](n - 2);//执行子内联.co_await lf::join;//等待子.co_return a + b;//加入后可安全读取.
};

分支库
另外还有concurrentcpp的使用也非常简单,如果要从源码开始学习我发现最简单的就是它:
并行源码

上面这几个库都不是全家桶,很容易引入.如果要那种全家桶的,优秀的也有不少,如boost,folly等等.最近大火的deepseek3fs使用的协程库就是folly中的.

相关文章:

2503C++,C++标准的执行

最优雅的应该是c26刚刚引入的std::execution,通过sender/receiver模型和常用的异步算法来简化调用异步逻辑,还可随时改成协程. #include <stdexec/execution.hpp> #include <exec/static_thread_pool.hpp> int main() {exec::static_thread_pool pool(3);auto sch…...

CSS网格布局Grid

目录 一、Grid 网格布局 1.Grid 布局基础 2.网格容器属性 3.网格项目属性 4.高级功能 5.典型应用场景 6.最佳实践 二、Flex和Grid对比 示例&#xff1a; 一、Grid 网格布局 CSS Grid 是一种强大的二维布局系统&#xff0c;能够以行和列的方式精确控制网页布局。它比传…...

微服务架构中的服务发现与 Consul 实践

在微服务架构中&#xff0c;服务之间的通信是核心问题之一。随着服务数量的增长&#xff0c;如何高效地管理和定位服务实例变得尤为重要。本文将介绍服务发现的基本概念&#xff0c;并详细讲解如何使用 Consul 进行服务注册、发现和健康检查。 1. 什么是服务发现&#xff1f; …...

医院挂号预约小程序|基于微信小程序的医院挂号预约系统设计与实现(源码+数据库+文档)

医院挂号预约小程序 目录 基于微信小程序的医院挂号预约系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、小程序用户端 2、系统服务端 &#xff08;1&#xff09; 用户管理 &#xff08;2&#xff09;医院管理 &#xff08;3&#xff09;医生管理 &#xf…...

Emacs 折腾日记(十九)——配置输入法和vim操作方式

上一篇文章中&#xff0c;我们将Emacs变得稍微好看了点。换成了自己喜欢的主题和颜色&#xff0c;这样每天用起来也比较养眼&#xff0c;不会特别排斥。本篇文章的主要任务就是配置输入法方便输入中文以及将vim的操作模式搬到Emacs中。进一步提到Emacs的可用性 配置中文输入法…...

蓝桥杯第十届 特别的数

题目描述 小明对数位中含有 2、0、1、9 的数字很感兴趣&#xff08;不包括前导 0&#xff09;&#xff0c;在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40&#xff0c;共 28 个&#xff0c;他们的和是 574。 请问&#xff0c;在 1 到 n 中&#xff0c;所有这样的数的…...

Qt开发:QInputDialog的使用

文章目录 一、QInputDialog的介绍二、 QInputDialog的基本用法三、使用 QInputDialog的实例四、QInputDialog的信号与槽 一、QInputDialog的介绍 QInputDialog 是 Qt 提供的一个对话框类&#xff0c;用于获取用户输入的文本、整数或浮点数。它提供了简单易用的静态方法和可定制…...

redis--JavaSpring客户端

目录 一、引言 二、配置 三、相关操作 四、总结 一、引言 本篇文章会将redis与spring项目进行结合&#xff0c;看看再spring项目中&#xff0c;redis是如何使用的 二、配置 三、相关操作 四、总结 在spring项目中的使用和在基础项目上的使用有差异&#xff0c;但是差异并不大…...

2、二分和贪心

一、二分 这里有个小技巧&#xff0c;你会发现&#xff0c;只要是求最大最小最多等等的贪心过程&#xff0c;我们就有3种方法&#xff1a;①二分②贪心算法③动态规划 我们先讲二分和贪心&#xff0c;动态规划比较麻烦&#xff0c;留到后期。 1、了解 2、模版 class Solution …...

QuecPython 网络协议之TCP/UDP协议最祥解析

概述 IP 地址与域名 IP 地址是网络中的主机地址&#xff0c;用于两台网络主机能够互相找到彼此&#xff0c;这也是网络通信能够成功进行的基础。IP 地址一般以点分十进制的字符串来表示&#xff0c;如192.168.1.1。 ​ 我们日常访问的网站&#xff0c;其所在的服务器主机都有…...

ISIS-2 邻居建立关系

上一章我们介绍了ISIS的基础概念以及报文内容和作用在什么样的场景下面的 这一章我们来介绍IS-IS的邻居建立关系 一、概念 IS-IS中路由器的角色可分为L1、L2、L1/2这三种类型其中的L1/L2有点类似与我们OSPF中的ABR IS-IS中的邻居关系分为L1与L2邻居关系,其中所有建立L2邻居关…...

Nature Machine Intelligence 嵌入式大语言模型使机器人能够在不可预测的环境中完成复杂的任务

近期英国爱丁堡大学发表Nature Machine Intelligence研究工作&#xff0c;提出了一种名为ELLMER&#xff08;具身大型语言模型支持机器人&#xff09;的创新框架&#xff0c;通过整合大型语言模型&#xff08;如GPT-4&#xff09;、检索增强生成&#xff08;RAG&#xff09;、视…...

Springboot整合elasticsearch详解 封装模版 仓库方法 如何在linux里安装elasticsearch

目录 版本 下载地址 ElasticSearch频繁报503错误 开放 9300 和 9200 两个端口 测试联通性 改动包装类 elasticsearchTemplate getAllRespRepository 封装elasticsearchService 业务逻辑 版本 首先要对应版本 这是我在官网找到的版本信息 一定要 springboot 和 es 相…...

【矩阵快速幂】P6601 「EZEC-2」机器|普及+

本文涉及知识点 【矩阵快速幂】封装类及测试用例及样例 P6601 「EZEC-2」机器 题目背景 tlx 喜欢科幻小说。 小宇宙中只剩下漂流瓶和生态球。漂流瓶隐没于黑暗里,在一千米见方的宇宙中,只有生态球里的小太阳发出一点光芒。在这个小小的生命世界中,几只清澈的水球在零重力环…...

FPGA助力智能机器人应用

今年开年AI机器人引爆科技圈&#xff0c;都说FPGA是“万能芯”&#xff0c;在AI方向上已经挣扎了几年&#xff0c;仍旧不能“破圈”&#xff0c;那么在机器人方向呢&#xff1f; 个人观点我是不太看好目前FPGA能在机器人方面能“破圈”&#xff0c;但是一切皆有可能&#xff0c…...

如何在jupyter notebook中使用django框架

(最好以管理员身份进入&#xff0c;否则在安装某些内容时会报错) 一.创建一个名为new_env虚拟环境 输入以下指令创建名为new_env的虚拟环境&#xff1a; conda create -n new_env python3.8 回车&#xff0c;出现以下内容&#xff0c;输入y确认安装&#xff0c;等待安装完毕…...

Axure RP9.0教程: 多级联动【设置选项改变时->情形->面板状态】(给动态面板元件设置相关交互事件的情形,来控制其他面板不同的状态。)

文章目录 引言I 多级联动(省、市、区)实现思路添加三省、市、区下拉列表给省下拉框添加数据源将市、区下拉框添加不同状态,分别以省、市命名给省下拉控件设置选项改变时的交互事件省下拉控件的交互事件情形市下拉交互事件的配置II 知识扩展: 展示省 → 地级市 → 区县的多级…...

速卖通vs亚马逊SP-API:接口权限、数据字段与采集成本对比测评

以下是关于速卖通和亚马逊 SP - API 在接口权限、数据字段与采集成本方面的对比测评&#xff1a; 接口权限 速卖通 申请流程&#xff1a;需在速卖通平台注册账号&#xff0c;创建应用后获取 API Key 和 Secret 等凭证。一般要填写企业或个人的相关信息&#xff0c;经过平台审…...

Rabbitmq消息被消费时抛异常,进入Unacked 状态,进而导致消费者不断尝试消费(下)

一、消费流程图 消息在消费出现异常的时候&#xff0c;将一直保留在消息队列&#xff0c;所以你会看到以下奇怪的现象&#xff1a; 消息队列仅有5个消息&#xff0c; 投递速度也非常快&#xff0c;结果却一直无法消费掉。 二、重试策略 重试机制的使用场景&#xff1a;重试机制…...

Java 基础入门代码示例解析

在 Java 编程的学习过程中&#xff0c;理解函数&#xff08;方法&#xff09;的使用以及简单系统功能的实现是非常重要的基础。本文将对一系列 Java 代码进行详细解析&#xff0c;这些代码涵盖了菜单驱动的功能选择、数据查询以及简单的 RBAC&#xff08;基于角色的访问控制&am…...

AI 的“幻觉”现象:深入解析 Hallucination 的成因与应对之道

文章目录 一、啥是 AI 的 Hallucination&#xff1f;二、啥时候容易出现幻觉&#xff1f;1. 知识边界之外的问题2. 模糊或不明确的输入3. 生成长篇内容4. 多模态任务中的误解5. 过度自信的语气要求 三、幻觉为啥会出现&#xff1f;原理是啥&#xff1f;1. 概率预测的本质2. 训练…...

核心知识——论文详解

引入 在2010年&#xff0c;来自Berkeley的博士生 Matei Zaharia 发表了一篇论文《Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing》。伴随着这篇论文的&#xff0c;是一个开源系统&#xff0c;也就是 Spark。在之后的几年里&…...

LeetCode hot 100 每日一题(15)——48.旋转图像

这是一道难度为中等的题目&#xff0c;让我们来看看题目描述&#xff1a; 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 提示…...

屏幕后处理Post-Processing安装及使用

一、安装Post-Processing插件 在 Window --- PackageManager 中搜索并安装 Post-Processing 二、添加后处理效果步骤 给场景中的相机Camera添加 Post - process Layer&#xff0c;只有添加了该组件的相机才会进行相应的后处理&#xff0c;此组件允许您为该后处理层配置抗锯齿…...

探索Halo:不止是博客,更是创作新宇宙

开篇&#xff1a;邂逅 Halo 作为一名热爱写作与分享的博主&#xff0c;拥有一个称手的博客系统一直是我的追求。在探索博客系统的旅程中&#xff0c;我尝试过不少平台&#xff0c;从 WordPress 到 Hexo &#xff0c;每一次转换都是为了寻找那个最完美的 “写作伴侣”。 WordP…...

吐血整理:Air8201如何使用LuatOS进行电源管理功能!

在物联网应用场景中&#xff0c;设备续航能力直接影响其部署成本与运维效率。LuatOS操作系统通过软件层面的精细化控制&#xff0c;为Air8201提供了灵活且高效的电源管理策略。本文将从系统架构、API接口、实战配置三个维度&#xff0c;解析如何利用LuatOS实现Air8201的智能电源…...

开源视觉语言模型MiniMax-VL-01:动态分辨率+4M超长文本,性能比肩GPT-4o

在人工智能领域&#xff0c;构建能够像人类一样理解、思考和行动的智能体&#xff08;AI Agent&#xff09;一直是研究人员的终极目标之一。而实现这一目标的关键在于模型是否具备足够强大的感知能力、记忆能力和推理能力。近期&#xff0c;国内人工智能公司MiniMax重磅开源了其…...

数据库:一文掌握 Neo4J 的各种指令(Neo4J指令备忘)

文章目录 入门Neo4J运行 Neo4J 使用进入管理页面 图数据库概念 Neo4j 语法读取查询结构仅写入查询结构读取-写入查询结构 Neo4j 读取数据MATCHWHERERETURNWITHUNION Neo4j 写入数据CREATESETMERGEDELETEREMOVEFOREACH调用子查询调用存储过程导入运算符nullPatternsUSESHOW FUNC…...

Java面试第十三山!《设计模式》

大家好&#xff0c;我是陈一。如果文章对你有帮助&#xff0c;请留下一个宝贵的三连哦&#xff5e; 万分感谢&#xff01; 一、设计模式入门指南 1. 什么是设计模式&#xff1f; 设计模式是可复用的解决方案模板&#xff0c;用于解决软件开发中常见的架构问题。如同建筑领域的…...

从 @SpringBootApplication 出发,深度剖析 Spring Boot 自动装配原理

在 Spring Boot 的开发旅程中&#xff0c;SpringBootApplication 注解堪称开启便捷开发之门的钥匙。它不仅是一个简单的注解&#xff0c;更是理解 Spring Boot 自动装配原理的重要入口。接下来&#xff0c;我们将以SpringBootApplication 为切入点&#xff0c;深入探究 Spring …...