将Rust编译时间提升 108 倍
这篇来自Burn的博客文章讨论了他们如何将Rust编译时间提高了108倍。以下是关键点的总结:
背景: 最初,他们矩阵乘法(matmul)基准测试的编译时间为108秒,通过实施多项优化后,降至仅1秒。
关键优化: 元素类型泛型交换:他们不再使用元素的泛型类型,而是用“伪造”的元素类型预先实例化函数,这大幅减少了生成的LLVM代码。这是最具影响力的优化。 优先使用Comptime系统而非关联常量泛型:通过使用Burn的comptime系统来表示矩阵大小,而不是Rust的关联常量泛型,他们实现了额外的近3倍的编译时间减少。 LLVM优化级别:对于调试构建(如测试),他们将LLVM的优化级别降低到零,这进一步加速了编译,同时不会显著影响测试目的的性能。
优化背景: 主要集中在使用Cargo缓存的增量编译上,这对于加速开发迭代周期至关重要。 编译速度慢的部分被确定为链接阶段和LLVM优化,而不是Rust编译器本身。 将生成的二进制文件从29M减至2.5M是加速编译时间的一个重要因素。
其他见解: 这些优化涉及到复杂的Rust特性,如proc宏、关联类型泛型和常量泛型,但关键的启示是,如果管理得当,这些特性不一定会减慢编译速度。 主要原则是生成的代码越少,编译速度就越快,而不是简单地减少编写的代码。
结论: 这些优化并不是适用于所有Rust项目的,但为希望提高项目编译性能的开发者提供了宝贵的经验教训。 文章鼓励Rust开发者考虑他们如何使用Rust的类型系统和编译器特性对编译时间产生影响,倡导关注减少生成代码和二进制文件大小。
https://burn.dev/blog/improve-rust-compile-time-by-108x/
比较Rust生态中最常见的Actor库
Ari Seyhun 在这篇博客文章中比较了五个领先的Rust Actor库:Actix, Coerce, Kameo, Ractor, 和 Xtra,侧重于性能和特性对比。以下是总结:
简介: 文章旨在通过在现实工作负载下对这些库进行基准测试来评估它们,具体关注的是吞吐量、延迟、actor创建速度和消息传递效率。
性能基准测试: Actor创建:测量每个库创建和初始化actor的速度。 消息传递:通过一个轮询场景来评估,其中100个actor按顺序接收消息。这比单一actor接收消息更好地模拟了实际的并发情况。
特性比较: 邮箱类型:不同库提供的邮箱实现影响性能和功能。 监管(Supervision):像Kameo这样的库内置了监管,这对于分布式系统的容错性至关重要。 运行时集成:库在与Rust的异步运行时(如Tokio)集成方面的差异影响性能和易用性。 分布式Actors:只有部分库开箱即支持分布式actor,这对于某些应用的扩展性至关重要。
具体库的特点: Actix:以其成熟性和本地并发性快著称,但其异步支持被指出不如其他库流畅。 Coerce:专为分布式系统设计,建立在Tokio之上。 Kameo:在本地和分布式需求之间取得平衡,性能良好,并内置监管,由Seyhun本人编写。 Ractor:适用于分布式actors,但每个actor只支持一种消息类型,这可能会限制灵活性。 Xtra:提供灵活的运行时选项,适合需要精简actor框架的项目。
结论与建议: 选择哪个库取决于具体项目需求,如是否需要分布式功能、偏好的运行时,或特定的性能特性。 Kameo被特别提到,Seyhun承认自己是作者,但也认可所有测试库的优点。
基准测试代表了2025年初的一个快照,随着时间的推移,库可能会进化,性能可能得到改善。
https://theari.dev/blog/comparing-rust-actor-libraries/
--
From 日报小组 Mike
社区学习交流平台订阅:
评论区
写评论还没有评论