Await-Tree Async Rust 可观测性的灵丹妙药 - 赵梓淇Select / Timeout) • 动态的调用关系 • 痛点:观测与调试工具无法理解灵活的执行逻辑 • Backtrace 不够直观 ( 调用栈 -> 调用树 ) • Tracing 无法追踪调用关系的变化 Async Rust 观测与调试的痛点 Async Rust 回顾 • 特性:用户态调度的无栈协程 • Pending Task 不存在栈空间 • 痛点:观测与调试工具无法还原 Pending 中的应用 • 云原生 SQL 流式数据库 • risingwave.com • GitHub 4.5k Stars • “Materialized View” • 计算:分布式流计算任务,实时增量维护 • 存储: S3 上的 Shared-storage 存储状态和数据 Await Tree 在 RisingWave 中的应用 • 技术挑战 • 计算任务需长期执行,稳定性要求高 • 算子逻辑复杂,计算与存储读写穿插,强依赖0 码力 | 37 页 | 8.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.0profile [unoptimized + debuginfo] target(s) in 0.13s 这一行表示 Cargo 只针对 src/main.rs 文件的微小修改而更新构建。依赖没有变化,所以 Cargo 知道它可以复用已经为此下载并编译的代码。 Cargo.lock 文件确保可重现构建 Cargo 有一个机制,确保无论是你还是其他人在任何时候重新构建代码,都会生成相同的构建 产物:Cargo -> v0.8.6 (available: v0.9.0) 28/562Rust 程序设计语言 简体中文版 Cargo 忽略了 0.9.0 版本。这时,你也会注意到的 Cargo.lock 文件中的变化无外乎现在使用 的 rand crate 版本是 0.8.6 。如果想要使用 0.9.0 版本的 rand 或是任何 0.9.x 系列的版本, 必须像这样更新 Cargo.toml 文件: [dependencies] 叫做 入栈(pushing onto the stack),而移出数据叫做 出栈(popping off the stack)。栈中的所有数据都必须 占用已知且固定的大小。在编译时大小未知或大小可能变化的数据,要改为存储在堆 上。 堆是缺乏组织的:当向堆放入数据时,你要请求一定大小的空间。内存分配器 (memory allocator)在堆的某处找到一块足够大的空位,把它标记为已使用,并返 回一个表示该位置地址的0 码力 | 562 页 | 3.23 MB | 1 月前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
Rust并行编译的挑战与突破Rust编译器并行化 Cargo多crate并行 二进制生成并行 更多更好的并行化? Rust编译器架构 语法树生成 宏展开 命名解析 泛型解析 类型检查 借用检查 单态化 二进制生成 增量编译系统 底层数据 结构 Rust语言编译器结构总览 考虑内部编译流程并行化 Rust并行并发 编译时线程安全检查 一些常见线程安全数据结构 常用Rust并行并发库 Rust并行并发0 码力 | 25 页 | 4.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
Rust HTTP 协议栈在终端通信场景的实践 - 胡凯支持响应分块 • 引入额外的缓存 控制机制 • 引入内容协商机 制 • 报文基本格式不 再变化 HTTP/2 • 二进制协议 • 支持多路复用 • 支持响应分块 • 支持标头压缩 • 支持服务端推送 • 报文基本格式不 再变化 HTTP/3 • 基于 UDP 连接 • 报文基本格式不 再变化 Rust China Conf 2022 – 2023, Shanghai, China Rust 与终端 HTTP 通信场景结合 针对网络不稳定场景: ➢ 支持用户设置速度限制范围:给消息 body 读取逻辑增加速度的上下限,以及时根据网络变化做 出操作。 ➢ 支持用户设置连接和请求的超时时间:给请求的各个区间设置定时器,以及时检测网络变化。 Rust China Conf 2022 – 2023, Shanghai, China Rust 与终端 HTTP 通信场景结合 提供用户界面表现的相关接口:0 码力 | 26 页 | 1.25 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Rust 版现就会更好。也 就是说,算法在不同的机器上的测试结果可能是不一致的。这意味着我们需要在各种机器上进行测试,统计 平均效率,而这是不现实的。 另一方面,展开完整测试非常耗费资源。随着输入数据量的变化,算法会表现出不同的效率。例如,在输入 数据量较小时,算法 A 的运行时间比算法 B 短;而在输入数据量较大时,测试结果可能恰恰相反。因此,为 了得到有说服力的结论,我们需要测试各种规模的输入数据,而这需要耗费大量的计算资源。 阶乘阶 第 2 章 复杂度分析 www.hello‑algo.com 33 图 2‑9 常见的时间复杂度类型 1. 常数阶 ?(1) 常数阶的操作数量与输入数据大小 ? 无关,即不随着 ? 的变化而变化。 在以下函数中,尽管操作数量 size 可能很大,但由于其与输入数据大小 ? 无关,因此时间复杂度仍为 ?(1) : // === File: time_complexity.rs === 基于链表可实现:栈、队列、哈希表、树、堆、图等。 链表在初始化后,仍可以在程序运行过程中对其长度进行调整,因此也称“动态数据结构”。数组在初始化后 长度不可变,因此也称“静态数据结构”。值得注意的是,数组可通过重新分配内存实现长度变化,从而具备 一定的“动态性”。 Tip 如果你感觉物理结构理解起来有困难,建议先阅读下一章,然后再回顾本节内容。 3.2 基本数据类型 当谈及计算机中的数据时,我们会想到文本、图片、视频、语音、3D0 码力 | 387 页 | 18.51 MB | 10 月前3
Hello 算法 1.1.0 Rust版时间比算法 B 短;但在另一台配置不同的计算机中,可能得到相反的测试结果。这意味着我们需要在各种机 器上进行测试,统计平均效率,而这是不现实的。 另一方面,展开完整测试非常耗费资源。随着输入数据量的变化,算法会表现出不同的效率。例如,在输入 数据量较小时,算法 A 的运行时间比算法 B 短;而在输入数据量较大时,测试结果可能恰恰相反。因此,为 了得到有说服力的结论,我们需要测试各种规模的输入数据,而这需要耗费大量的计算资源。 < 阶乘阶 第 2 章 复杂度分析 hello‑algo.com 33 图 2‑9 常见的时间复杂度类型 1. 常数阶 ?(1) 常数阶的操作数量与输入数据大小 ? 无关,即不随着 ? 的变化而变化。 在以下函数中,尽管操作数量 size 可能很大,但由于其与输入数据大小 ? 无关,因此时间复杂度仍为 ?(1) : // === File: time_complexity.rs === 基于链表可实现:栈、队列、哈希表、树、堆、图等。 链表在初始化后,仍可以在程序运行过程中对其长度进行调整,因此也称“动态数据结构”。数组在初始化后 长度不可变,因此也称“静态数据结构”。值得注意的是,数组可通过重新分配内存实现长度变化,从而具备 一定的“动态性”。 Tip 如果你感觉物理结构理解起来有困难,建议先阅读下一章,然后再回顾本节内容。 3.2 基本数据类型 当谈及计算机中的数据时,我们会想到文本、图片、视频、语音、3D0 码力 | 388 页 | 18.50 MB | 1 年前3
Hello 算法 1.0.0 Rust版时间比算法 B 短;但在另一台配置不同的计算机中,可能得到相反的测试结果。这意味着我们需要在各种机 器上进行测试,统计平均效率,而这是不现实的。 另一方面,展开完整测试非常耗费资源。随着输入数据量的变化,算法会表现出不同的效率。例如,在输入 数据量较小时,算法 A 的运行时间比算法 B 短;而在输入数据量较大时,测试结果可能恰恰相反。因此,为 了得到有说服力的结论,我们需要测试各种规模的输入数据,而这需要耗费大量的计算资源。 < 阶乘阶 第 2 章 复杂度分析 hello‑algo.com 33 图 2‑9 常见的时间复杂度类型 1. 常数阶 ?(1) 常数阶的操作数量与输入数据大小 ? 无关,即不随着 ? 的变化而变化。 在以下函数中,尽管操作数量 size 可能很大,但由于其与输入数据大小 ? 无关,因此时间复杂度仍为 ?(1) : // === File: time_complexity.rs === chaining」将单个元素转换为链表,将 键值对作为链表节点,将所有发生冲突的键值对都存储在同一链表中。图 6‑5 展示了一个链式地址哈希表的 例子。 图 6‑5 链式地址哈希表 基于链式地址实现的哈希表的操作方法发生了以下变化。 ‧ 查询元素:输入 key ,经过哈希函数得到桶索引,即可访问链表头节点,然后遍历链表并对比 key 以查 找目标键值对。 ‧ 添加元素:首先通过哈希函数访问链表头节点,然后将节点(键值对)添加到链表中。0 码力 | 383 页 | 17.61 MB | 1 年前3
共 13 条
- 1
- 2













