C++高性能并行编程与优化 - 课件 - 15 C++ 系列课:字符与字符串
+= 、 == 等直观的运算符重载: • string(“hello”) + string(“world”) == string(“helloworld”) • string 符合 vector 的接口,例如 begin/end/size/resize…… • string 有一系列成员函数,例如 find/replace/substr…… • string 可以通过 s.c_str() 重新转换回古板的 ,则默认 是 C 语言的 0 结尾字符串, find 还要去求 len = strlen(“str”) , 相对低效。 find 寻找子字符串 find 应用案例:计算子字符串出现了多少次 官方文档对 find 的描述 https://en.cppreference.com/w/cpp/string/basic_string/find 反向查找 rfind • find 是从字符串头部开始查找,返回第一次出现的地方。 char *s, size_t slen); replace 批量替换字符串 不是最高效的写法,最坏情况可达 O(mn) ,其中 m 是 “ pyb” 出现次数,如何优化?留作课后作业! 官方文档对 replace 的描述 https://en.cppreference.com/w/cpp/string/basic_string/replace 小彭老师表示: 边界情况总结 • s.substr(pos0 码力 | 162 页 | 40.20 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 05 C++11 开始的多线程编程
std::unique_lock 或 std::lock_guard 的第二个参数,这时他们会默认 mtx 已经 上锁。 std::unique_lock 和 std::mutex 具有同样的接口 • 其实 std::unique_lock 具有 mutex 的所有成员函数: lock(), unlock(), try_lock(), try_lock_for() 等。除了他 会在解构时按需自动调用 这种只要具有某些指定名字的成员函数,就判断一个 类是否满足某些功能的思想,在 Python 称为鸭子类 型,而 C++ 称为 concept (概念)。比起虚函数和 动态多态的接口抽象, concept 使实现和接口更加解 耦合且没有性能损失。 第 4 章:死锁 同时锁住多个 mutex :死锁难题 • 由于同时执行的两个线程,他们中发生的指令不 一定是同步的,因此有可能出现这种情况: other 陷入等待 后 func 里的 unlock() 永远得不到调用。 解决 1 : other 里不要再上锁 • 遇到这种情况最好是把 other 里的 lock() 去掉,并在其文档中说明:“ other 不是线 程安全的,调用本函数之前需要保证某 mutex 已经上锁。” 解决 2 :改用 std::recursive_mutex • 如果实在不能改的话,可以用0 码力 | 79 页 | 14.11 MB | 1 年前3新一代分布式高性能图数据库的构建 - 沈游人
索引 LSM-Tree 容灾保障 ( BR ) 元数据层 事务管理 MVOCC 计算层 Cypher AST 优化器 图计算 内存加速引 擎 服务接口 HTTP/RPC Spark 连接器 Python UDF 执行器 索引管理 一致性存储 RAFT 分片管理 元数据 集群管理 用户权限 GNN 应用层 Atlas 图平台 例如,对于属性的存储,可以通过自行序列化 / 反序列化大幅节省内存 • 而自定义存储格式往往需要内存的精细操作,由于 Rust 允许在 unsafe 下访问裸指针, 可以实现零开销读取 • 将 Unsafe 包裹,对外提供足够的接口 i32 i64 u32 u32 string string 定长 变长 高可用技术方案 基于 Chain Replication ( CRAQ ) 算法实现,进行数据副本处理,头 结点写,多结点读,支持读写分离 强大的跨平台能力,在不同架构 下可以准确的控制代码行为 编译期间对生命周期检查确保内 存安全,无 GC 和运行时损耗 01 完善的测试类型支持,包括单元 测试、集成测试、基准测试等 02 03 和文档系统以及 CI/CD 工具的良 好集成 完整的断言系统 异步协程 零成本抽象 强大的测试框架 REPL 命令行客户端 WebUI 面向分析师,提供图模型定义、数据管理、图查询分析、服务状态监控、用户管理能力0 码力 | 38 页 | 24.68 MB | 1 年前3应用 waPC (rust) 做软件测试工具
WebAssembly 和 WebAssembly 调用本机代码的通信 (messaging) 和 错误处理 (error handling) 。 什么是 waPC? WASM 外部函数 接口 FFI Input type Return type Platform 底层 I32 I32 Unknown waPC &[u8] Result,error > Linux • Sleep • now websocket standin for wasm • 可用 Javascript 在游览器里面 模拟数据 • 发 RPC 请求 • 可以上传 proto 文档 • 可以验证数据 前段链接 Wasm Mock Server 随机 waPC 注册逻辑 Use wasm without fear 支持以 websocket 代替 wasm 协议 • 不可能为每个 0 码力 | 30 页 | 2.50 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 17 由浅入深学习 map 容器
,内存管理与对象生命周期 10. C++ 异常处理机制的前世今生 我们都要认真鞋习哦 我们都要认真鞋习哦 第一章:读取与写入 我负责监督你鞋习 ! 我负责监督你鞋习 ! map 查找元素的两个接口 • map 提供了两个查找元素的接口,一曰 [] ,二曰 at 。 • 那么他们两个又有什么区别呢?很多新手都分不清他俩,可能只认识 [] 。 读取 map 元素 • mapm; 。而如果另一个同学是硬核的计算 机思维,相当于 C++ 的一视同仁 API ,他会以为小彭老师真的在吃答辩。 • 这是通常来说,不过万一小彭老师真的这么重口味在吃答辩呢?要怎么传达这个信息? C++ 一视同仁的接口就能处理这种罕见的情况,不过 Python 用一些 if 语句套一套一样可以。 深入理解 Python 中 [] 能自动区分是读是写的原理 • 写入要创建元素,而读取则要在元素不存在时出错,确实应该是两个不同的函数。 简单粗暴的 Java 用法 • 与 Python 和 C++ 不同, Java 放弃了花里胡哨的运算符重载,索性都采用成员函数 get put 来表示,非常明确。主要是为了把 get 和 put 作为接口函数,可以对应多个具体 实现。 错误示范 • 小彭老师说过,读取必须用 at 。 • 而这位同学却用了 [] 来读取 items 里的值。 • 乍看之下好像没错,运行结果也是正确的,但 这只是碰巧你的 0 码力 | 90 页 | 8.76 MB | 1 年前3Go读书会第二期
• 变长参数函数妙用 • 方法的本质、 receiver 参数类型选择、方法集 合 Go 程序逻辑的基本承载单元 Part5 – 语法核心:接口 践行哲学,遵循惯例,认清本质,理解原理 • 接口的内部表示 • 接口设计 • 接口与组合 接口:一切皆组合 Part6 – 语法核心:并发编程 践行哲学,遵循惯例,认清本质,理解原理 • 并发设计 vs. 并行设计 • 并发原语的原理与应用模式0 码力 | 26 页 | 4.55 MB | 1 年前3Rust 异步并发框架在移动端的应用 - 陈明煜
移动端诉求:易用性 • IO 密集性任务与 CPU 密集型任务融合 异步并发框架如 tokio 大多用于处理大量 异步 IO 场景,而 CPU 密集型任务一般 使用 rayon 。 当前单框架提供的接口无法使用户在一个 任务中同时处理 IO 任务以及 CPU 任 务。 Incompatibility of the third party Runtime with Mobile 现有框架无法完美适配移动端(二) queue task New task Global queue New task take & run take & run Worker take & run Steal & run 两种接口拥有两套割裂的调度模式和线程池 华为 Ylong 异步并发框架 Ylong Runtime 并发框架 华为 Rust 异步并发框架,近期计划在 OpenHarmony 上开源。与 Tokio 类似,同样为事 类似,同样为事 件驱动型调度框架,提供异步 IO 、定时器、同步原 语等功能。但额外提供: 任务优先级调度 异步并行迭代器 结构化并发 Ylong Runtime 对外 接口 APP/SA 调度器 提 交 任 务 Async function CPU Task CPU Task IO Task IO Task Executor 高 中 低 线程池 Reactor0 码力 | 25 页 | 1.64 MB | 1 年前3Zadig 产品使用手册
)、数 据变更、部署、冒烟测试、项目管理任务 变更 测试工程师 更新测试验证环境 project-sit-workflow • 构建、配置变更( Apollo/Nacos )、数 据变更、部署、接口测试 更新集成测试环境 project-auto-sit-workflow • 构建,部署,场景测试 发布工程师 更新预发环境 project-uat-workflow • 质量门禁、构建、配置变更( 变更发布 产品规划 需求开发 服务的调试——调整副本数量 / 重启实例 Sprint 发布 测试验证 变更发布 产品规划 测试集管理—— GitLab 仓库管理 支持冒烟测试 / 接口测试 /UI 测试 / 场景测试 / 性能测试等 1. 本地编写测试脚本并针对 sit 环境本地自测 2. 没问题后提交到 GitLab 仓库 测试验证 Sprint 发布 需求开发 变更发布 安全扫描 ->IM 通知 Sprint 发布 需求开发 变更发布 产品规划 测试验证 sit 发布——执行 sit 工作流更新环境进行集成验证 包括步骤:构建 -> 部署 sit 环境 -> 接口测试 -> IM 通知 Sprint 发布 需求开发 变更发布 产品规划 测试验证 自动化测试——测试结果分析 Sprint 发布 需求开发 变更发布 产品规划 测试验证 uat0 码力 | 52 页 | 22.95 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 02 现代 C++ 入门:RAII 内存管理
• 求一个列表中所有数的和: # 参考资料 - [ 热心观众整理的学习资料 ](https://github.com/jiayaozhang/OpenVDB_and_TBB) - [C++ 官方文档 ](https://en.cppreference.com/w/) - [C++ 核心开发规范 ](https://github.com/isocpp/CppCoreGuidelines/blob bookstack.cn/read/CMake-Cookbook/README.md) - [CMake 官方文档 ](https://cmake.org/cmake/help/latest/) - [Git 官方文档 ](https://git-scm.com/doc) - [GitHub 官方文档 ](https://docs.github.com/en) 古代: C 语言 近代: C++98 引入0 码力 | 96 页 | 16.28 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 13 C++ STL 容器全解之 vector
况下,只用最简单的接口(首地址指针) 就完成了遍历和打印的操作。 迭代器模式 • 使用指针和长度做接口的好处是,可以通 过给指针加减运算,选择其中一部分连续 的元素来打印,而不一定全部打印出来。 • 比如这里我们选择打印前三个元素(去掉 了最后一个元素,但不必用 pop_back 修 改数组,只要传参数的时候修改一下长度 部分即可)。 迭代器模式 • 使用指针和长度做接口的好处是,可以通0 码力 | 90 页 | 4.93 MB | 1 年前3
共 19 条
- 1
- 2