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使用零成本抽象力求达到的目标。

相关推荐
Scott9999HH2 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
GetcharZp2 小时前
抛弃低效SSH!这套Ansible+Web可视化神器,让你天天准点下班!
后端
码智社3 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海3 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖4 小时前
JDK 26 新特性详解
java·开发语言
马优晨4 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
weixin_446260856 小时前
HACO:面向动态部署环境的对冲式智能计算可靠多智能体调度框架
后端·python·flask
a1117766 小时前
2FA 验证码生成器(github登录验证 app)
笔记·学习
我的xiaodoujiao6 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest
doiito6 小时前
【AI 应用】从“外国人味”到地道中文:kokoroi-rs v0.1.2 架构升级深度解析
ai·rust·系统设计