Rust并行编译的挑战与突破Rust编译器并行化 Cargo多crate并行 二进制生成并行 更多更好的并行化? Rust编译器架构 语法树生成 宏展开 命名解析 泛型解析 类型检查 借用检查 单态化 二进制生成 增量编译系统 底层数据 结构 Rust语言编译器结构总览 考虑内部编译流程并行化 Rust并行并发 编译时线程安全检查 一些常见线程安全数据结构 常用Rust并行并发库 Rust并行并发 线程数大于1 同一份代码 缺点:业务代码带有泛型参数 挑战:消减共享数据结构效率损失 动态线程安全检查 —— 自动切换数据同步模式 数据结 构方法 数据 同步 数据 同步 返回结果 线程数为1 线程数>1 Lock 单线程 同步器 多线程 同步器 挑战:并行环境内存分配器的设计 allocator1 allocator2 allocator3 allocatorN 从并行编译到并行程序设计 用巧妙的数据结构设计化解效率瓶颈 • thread_local • specialization • WorkerLocal • 线程级缓存 用优秀的设计消减数据同步代价 读写分离 限制作用范围 COPY-WRITE机制 优化并行粒度 任务粒度与并行效率的关系 rayon库中的粒度控制函数 死锁的检测和处理 基于rayon线程池的自动触发式死锁检测0 码力 | 25 页 | 4.60 MB | 1 年前3
王宜国 - 基于 Rust 编程语⾔构建 Amphitheatre CLI Desktop Server 的全平台实践经验Update)模式时,当你在⼯程根 ⽬录放置 .devcontainer ⽬录时,Amphitheatre 终端软 件会识别 .devcontainer 规范,借助内置的 Syncthing 将变化的代码增量同步到 Amphitheatre 集群内,让你 可实时构建并预览到效果。 为了加速构建,集群内将直接编译并替换掉当前可执 ⾏的进程,⽽⾮全量构建镜像再发到到镜像仓库,然 后再拉取镜像替代旧的 Pod0 码力 | 34 页 | 10.81 MB | 1 年前3
Rust 程序设计语言 简体中文版 1.85.0个限制的好处是 Rust 可以在编译时就避免数据竞争。数据竞争(data race)类似于竞态条 件,它可由这三个行为造成: • 两个或更多指针同时访问同一数据。 • 至少有一个指针被用来写入数据。 • 没有同步数据访问的机制。 数据竞争会导致未定义行为,难以在运行时追踪,并且难以诊断和修复;Rust 通过拒绝编译 存在数据竞争的代码来避免此问题! 一如既往,可以使用大括号来创建一个新的作用域,以允许拥有多个可变引用,只是不能同时 5。可以尝试用值 5 来提取变量 s 的第一个 单词,不过这是有 bug 的,因为在我们将 5 保存到 word 之后 s 的内容已经改变。 我们不得不时刻担心 word 的索引与 s 中的数据不再同步,这既繁琐又易出错!如果编写这么 一个 second_word 函数的话,管理索引这件事将更加容易出问题。它的签名看起来像这样: fn second_word(s: &String) -> (usize (usize, usize) { 现在我们要跟踪一个开始索引和一个结束索引,同时有了更多从数据的某个特定状态计算而来 的值,但都完全没有与这个状态相关联。现在有三个飘忽不定的不相关变量需要保持同步。 幸运的是,Rust 为这个问题提供了一个解决方法:字符串 slice。 字符串 slice 字符串 slice(string slice)是 String 中一部分值的引用,它看起来像这样: 89/562Rust0 码力 | 562 页 | 3.23 MB | 29 天前3
基于 Rust Arrow Flight 的物联网和时序数据传输及转换工具 霍琳贺核心功能开源 • SQL 支持 • 无模式写入 • 缓存 • 流计算 • 数据订阅 • 集群、高可用 高可靠、线性扩展 + 专业技术服务 • 边云数据复制 • 跨云 / 异地数据复制 • 增量备份 • 多级存储 • 工业数据接入 全托管时序数据 管理云服务平台 • 全托管服务 • VPC 对等连接 • 多云部署( AWS/Azure/ GCP) CONTENTS 自 我 High Avalibility 2022.12 2023.05 2023.09 Usability Functionality taosX - 集群运维 • 数据库复制 • 全量 / 增量备份 • 数据导入 / 导出 • 数据库迁移 • 异地容灾 taosX - 数据接入 Comming Soon taosX - 流式处理 taosX - Transformer • Parse0 码力 | 29 页 | 2.26 MB | 1 年前3
Await-Tree Async Rust 可观测性的灵丹妙药 - 赵梓淇中的应用 • 云原生 SQL 流式数据库 • risingwave.com • GitHub 4.5k Stars • “Materialized View” • 计算:分布式流计算任务,实时增量维护 • 存储: S3 上的 Shared-storage 存储状态和数据 Await Tree 在 RisingWave 中的应用 • 技术挑战 • 计算任务需长期执行,稳定性要求高 • 算子逻辑复杂,计算与存储读写穿插,强依赖0 码力 | 37 页 | 8.60 MB | 1 年前3
KCL: Rust 在编译器领域的实践与探索Span & SourceMap • Session • Paraller • …… IDE 友好的编译器架构 1. 错误恢复: 不完整代码的编译 • 代码补全 • 错误代码的语义分析 2. 增量编译 • 大规模场景下的编译优化和 IDE 性能提升 • 编译粒度: 项目 -> 文件 -> 函数/定义 3. 结构化语义模型(Structured Semantic Model) • Using0 码力 | 25 页 | 3.50 MB | 1 年前3
Comprehensive Rust(繁体中文)並行:上午練習 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320 XIV 並行:下午 326 63 非同步的 Rust 327 63.1 async/await . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 63.4 工作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 63.5 非同步管道 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 64 Future 控制流程 332 65.2 Pin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 65.3 非同步特徵 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 65.4 安裝 . . . . .0 码力 | 358 页 | 1.41 MB | 10 月前3
Comprehensive Rust(繁体中文) 202406並行:上午練習 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 XIV 並行:下午 324 63 非同步的 Rust 325 63.1 async/await . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 63.4 工作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328 63.5 非同步管道 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328 64 Future 控制流程 330 65.2 Pin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 65.3 非同步特徵 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 65.4 安裝 . . . . .0 码力 | 356 页 | 1.41 MB | 1 年前3
Rust 语言学习笔记........... 95 7.2.3 通过克隆发送者来创建多个生产者 ........................................... 96 7.2.4 异步通道与同步通道 ............................................................. 97 7.2.5 可发送的消息类型 .............. 4.2 堆 .................................................................................. 102 7.5 同步 ........................................................................................ 102 7.5 Got: thread 虽然你可能会看到这些值以不同的顺序出现。在并发下,运行结果可能每次都 不相同。以进入到 channel 的顺序为主。 7.2.4 异步通道与同步通道 Rust 的标准库其实提供了两种类型的通道:异步通道和同步通道。在前面使用 的都是异步通道。异步通道指的是:不管接收者是否正在接收消息,消息发送 者在发送消息时都不会阻塞。为了验证这一点,我们尝试多增加个线程来发送 消息:0 码力 | 117 页 | 2.24 MB | 1 年前3
Rust 异步并发框架在移动端的应用 - 陈明煜类似支持异步 IO ,目前已经半废弃 async-std 更轻量化的调度框架,功能被拆分 到其他多个库中, IO 密集场景性 能不如 Tokio smol Rayon 并非异步运行时。它通过同步 多线程模型提供了并行迭代器功能, 适用于处理 CPU 密集型计算任务 rayon 现有框架无法完美适配移动端(一) Core Thread Thread Worker Worker task 异步并发框架 Ylong Runtime 并发框架 华为 Rust 异步并发框架,近期计划在 OpenHarmony 上开源。与 Tokio 类似,同样为事 件驱动型调度框架,提供异步 IO 、定时器、同步原 语等功能。但额外提供: 任务优先级调度 异步并行迭代器 结构化并发 Ylong Runtime 对外 接口 APP/SA 调度器 提 交 任 务 Async function 阻塞等待所有 Scope 内的子线程任务完成 子线程执行的闭包中可以捕获 Scope 外的变 量 AsyncScope 将 std 库中 thread scope 的思想异步化 在同步环境阻塞等待子异步任务完成,在异步 环境异步等待子异步任务完成 优先级继承:子任务默认继承父任务优先级, 也可使用 detached 模式指定其他优先级 任务取消:取消父任务,也将取消所有子任务0 码力 | 25 页 | 1.64 MB | 1 年前3
共 23 条
- 1
- 2
- 3













