15.4.循环和迭代器的性能比较

为了确定是使用循环还是迭代器,你需要先知道到底哪一个更快:例如search函数使用for循环和迭代器之间哪个版本更快。

我们通过加载一本《福尔摩斯侦探集》查找"the"单词,来运行一项基准测试来看看哪个更快。下面是测试结果:

rust 复制代码
test bench_search_for  ... bench:  19,620,300 ns/iter (+/- 915,700)

test bench_search_iter ... bench:  19,234,900 ns/iter (+/- 657,200)

这两个测试有着相近的性能!在这我们不会详述基准测试代码,我们的重点不是证明这两种实现方式有着相同的结果而是让我们大致了解一下这两种实现如何进行性能方面的比较。

为了进行全面的基准测试,你应该使用不同的文件大小,使用不同的关键字,不同长度的关键字,和其他不同的设定来进行全面的测试比较。重点是,迭代器虽然是高级抽象,但是编译后的代码和你用低级代码编写的代码几乎相同。迭代器是rust的零成本抽象,使用这种方法可以不必增加额外的实时负担。

在大部分情况下,Rust使用迭代器编译后的代码几乎和手写的汇编代码相近。应用某些优化(循环展开和数组边界检查)使得生成的代码及其有效率。知道了这些,你可以大胆的使用迭代器和闭包。这些代码不但使得代码看上去更高级,也不会损失性能。

总结

闭包和迭代器是由函数性编程理念所启发的Rust特性。这使得Rust可以使用低级性能基础上清晰的表达高级理念。闭包和迭代器的实现可以保证实时性能不受影响。这也是Rust使用零成本抽象力求达到的目标。

相关推荐
IT_陈寒6 小时前
Vite的热更新突然不香了,排查三小时差点砸键盘
前端·人工智能·后端
子兮曰7 小时前
Agency-Agents 深度解析:400+ AI 专家的"梦之队"如何重塑开发工作流
前端·后端·vibecoding
用户8356290780518 小时前
Python 实现 PDF 文件加密与解密方法
后端·python
小满zs8 小时前
Go语言第二章(小无相功)
后端·go
用户8356290780518 小时前
使用 Python 冻结与拆分 Excel 窗格教程
后端·python
karry_k8 小时前
MyBatis批量insert-select踩坑:useGeneratedKeys=true 可能让PostgreSQL返回大量插入结果
java·后端
妙码生花8 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十九):点选验证码代码逐行目检
前端·后端·go
贰先生8 小时前
Xiuno BBS X版 用户封禁系统
后端
karry_k8 小时前
PostgreSQL 在 MyBatis 中执行正常 SQL 失效:一次 DELETE USING 踩坑记录
java·后端
ServBay8 小时前
不会写代码也能建站?AI 时代,非技术创始人如何从零搭建自己的 Web 项目
后端·mcp