Rust并行编译的挑战与突破查询互相调用 查询缓存系统 查询依赖信息 查询结果缓存 查询执行状态 查询保存文件 性能瓶颈点 频繁访问查询系统,成为效率瓶颈点 挑战:缓存系统访问热点效率瓶颈 Sharded —— 接口统一,存储分离 cache1 cache2 cache3 cacheM ... thread1 thread2 thread3 threadN ... 根据Key哈希值决定索引 Sharded数据结构设计 从并行编译到并行程序设计 用巧妙的数据结构设计化解效率瓶颈 • thread_local • specialization • WorkerLocal • 线程级缓存 用优秀的设计消减数据同步代价 读写分离 限制作用范围 COPY-WRITE机制 优化并行粒度 任务粒度与并行效率的关系 rayon库中的粒度控制函数 死锁的检测和处理 基于rayon线程池的自动触发式死锁检测 通过有向图环路检测移除死锁0 码力 | 25 页 | 4.60 MB | 1 年前3
Rust分布式账务系统 - 胡宇TPS 的流量 可演化性:业务逻辑与底层 API 解耦,当业务发生改变 时,底层 API 不用改变 分布式账务系统 设计理念 - Rust 是我们可靠的基石 分布式账务系统 存算分离 API 解耦 读写分离 层级账号 Rust ● 事务层与账户层分 离 ● 独立水平扩展 ● CQRS ● Event Sourcing ● 针对读场景,写场 景分别优化 ● 稳定的底层 API0 码力 | 27 页 | 12.60 MB | 1 年前3
新一代分布式高性能图数据库的构建 - 沈游人,可扩展的分析引擎支持更复 杂的数据挖掘和机器学习场景 MPP Massively Parallel Processing 架构,大规模集群 分布式存储及并行计 算, Shared Nothing 模式支 持存储计算分离 高性能 基于 Rust 开发的分布式存储引 擎及图计算引擎,精细的内存 管理设计,内置索引系统,支 持毫秒级的并发查询响应速度 易用 AQL(Atlas Graph Query Language) u32 u32 string string 定长 变长 高可用技术方案 基于 Chain Replication ( CRAQ ) 算法实现,进行数据副本处理,头 结点写,多结点读,支持读写分离 ,提供更好的并发查询能力 数据高可用实现 Chain Replication 数据高可用方案 服务高可用实现 系统中 Meta , TS 服务采用主备架 构,基于 Raft 算法实现租约,进行0 码力 | 38 页 | 24.68 MB | 1 年前3
Rust 程序设计语言简体中文版更新到新版的 Rust • 打开本地安装的文档 • 直接通过 rustc 编写并运行 Hello, world! 程序 • 使用 Cargo 创建并运行新项目 是时候通过构建更实质性的程序来熟悉读写 Rust 代码了。所以在第二章我们会构建一个猜猜 看游戏程序。如果你更愿意从学习 Rust 常用的编程概念开始,请阅读第三章,接着再回到第 二章。 22/600 Rust 程序设计语言 简体中文版 现在有了一个找到字符串中第一个单词结尾索引的方法,不过这有一个问题。我们返回了一个 独立的 usize ,不过它只在 &String 的上下文中才是一个有意义的数字。换句话说,因为它 是一个与 String 相分离的值,无法保证将来它仍然有效。考虑一下示例 4-8 中使用了示例 4-7 中 first_word 函数的程序。 文件名:src/main.rs # fn first_word(s: &String) 带有公有和私有字段的结构体 因为 back_of_house::Breakfast 结构体的 toast 字段是公有的,所以我们可以在 eat_at_restaurant 中使用点号来随意的读写 toast 字段。注意,我们不能在 eat_at_restaurant 中使用 seasonal_fruit 字段,因为 seasonal_fruit 是私有的。尝试去 除那一行修改 seasonal_fruit0 码力 | 600 页 | 12.99 MB | 1 年前3
Rust 程序设计语言 简体中文版 1.85.0• 更新到新版的 Rust • 打开本地安装的文档 • 直接通过 rustc 编写并运行 Hello, world! 程序 • 使用 Cargo 创建并运行新项目 是时候通过构建更实质性的程序来熟悉读写 Rust 代码了。所以在第二章我们会构建一个猜数 字游戏程序。如果你更愿意从学习 Rust 常用的编程概念开始,请阅读第三章,接着再回到第 二章。 21/562Rust 程序设计语言 简体中文版 现在有了一个找到字符串中第一个单词结尾索引的方法,不过这有一个问题。我们返回了一个 独立的 usize,不过它只在 &String 的上下文中才是一个有意义的数字。换句话说,因为它是 一个与 String 相分离的值,无法保证将来它仍然有效。考虑一下示例 4-8 中使用了示例 4-7 中 first_word 函数的程序。 文件名:src/main.rs fn main() { let mut s 7-9: 带有公有和私有字段的结构体 因为 back_of_house::Breakfast 结构体的 toast 字段是公有的,所以我们可以在 eat_at_restaurant 中使用点号来读写 toast 字段。注意,我们不能在 eat_at_restaurant 中 使用 seasonal_fruit 字段,因为 seasonal_fruit 是私有的。尝试去除那一行修改 seasonal_fruit0 码力 | 562 页 | 3.23 MB | 1 月前3
Rust 语言学习笔记具体内容需要查看闭包的可变借用。 3.2 引用和借用 所有权系统允许我们通过“Borrowing”的方式达到这个目的。这个机制非常像 其他编程语言中的“读写锁”,即同一时刻,只能拥有一个“写锁”,或只能 拥有多个“读锁”,不允许“写锁”和“读锁”在同一时刻同时出现。当然这 也是数据读写过程中保障一致性的典型做法。只不过 Rust 是在编译中完成这个 (Borrowing)检查的,而不是在运行时,这也就是为什么其他语言程序在运行过 引用。 2.在借用周期内,借用方可以读写这块内存,所有者被禁止读写内存;且所有 者保证在有“借用”存在的情况下,不会释放或转移内存。 3.失去所有权的变量不可以被借用(访问)。 4.在租借期内,内存所有者保证不会释放/转移/可变租借这块内存,但如果是 在非可变租借的情况下,所有者是允许继续非可变租借出去的。 5.借用周期满后,所有者收回读写权限。 6.借用周期小于被借用者(所有者)的生命周期。 = &x as *const i32; let points_at = unsafe { *raw }; println!("raw points at {}", points_at); 2.读写一个可变的静态变量 static mut static mut N: i32 = 5; unsafe { N += 1; println!("N: {}", N); }0 码力 | 117 页 | 2.24 MB | 1 年前3
Rust语言核心竞争力-庄晓立安全地读写内存 • 在限定时间和空间范围内读写内存 • 防止被他人意外修改或释放 • 避免访问空指针和野指针 安全地释放内存 • 在恰当的时机释放 • 确保释放,不遗漏 • 仅释放一次 内存不安全? • 指针越界访问,意外修改别处内存 • 内存被提前释放,形成野指针,非法读写内存 • 野指针又转化为合法指针,意外修改别处内存 • NULL指针解引用,非法操作 • 并发读写同一内存地址,数据竞争0 码力 | 51 页 | 1.09 MB | 1 年前3
Rust在物理引擎研发中的应用 崔汉青动作物理技术 动作技术 Motion 物理技术 Physics 规则驱动 AI生成 数据驱动 AI加速 云原生架构和 AI 能力 架构特点 性能特点 功能特点 云原生架构 单机架构 动作物理分离 跨平台确定性 动作物理统一 算力动态调配 分布式计算 物理材质统一解算 算法优化 物理材质单独解算 工程优化 性能待优化 AI仿真加速 前沿动作功能 缺乏动作功能 AI动作生成 • 不考虑版本兼容性 • 不带字段描述信息 • 仅支持primitives, Vec, 以及它们的组合嵌套 • 分布式物理引擎的计算和IO都很重要 • 计算线程和IO线程分离,各自绑定CPU核心 Motphys 特化网络层 自定义 pure rust message 自定义编解码协议 自动 ack 和可测量 RTT 的通信框架 一切为低延迟服务 分布式物理,突破单机算力的瓶颈 0 码力 | 22 页 | 1.18 MB | 1 年前3
使用Rust与ClickHouse构建高效可靠的日志系统Loki • 资源占用过大 • 统计/计算能力比较弱 • 组件过多,排查问题比较困难 • 商业使用不友好的开源协议 • 为什么选择Mencius+ClickHouse • 存储计算与业务分离 • 计算/统计能力更强 • 资源占用更小,性能更好 • 更友好的开源协议 系统介绍 • 多种接入方式 • Agent • Client • 查询 • LogQL • OpenTSDB0 码力 | 19 页 | 2.66 MB | 1 年前3
Await-Tree Async Rust 可观测性的灵丹妙药 - 赵梓淇S3 上的 Shared-storage 存储状态和数据 Await Tree 在 RisingWave 中的应用 • 技术挑战 • 计算任务需长期执行,稳定性要求高 • 算子逻辑复杂,计算与存储读写穿插,强依赖 Async • Await-Tree 的应用 • 数次帮助解决棘手的 Async Stuck 问题 • 长期于生产环境部署,性能开销极低 Backtrace 的补充 Await0 码力 | 37 页 | 8.60 MB | 1 年前3
共 16 条
- 1
- 2













