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

相关推荐
青山是哪个青山4 小时前
LangChain 学习笔记(四):Message 与提示词模板
笔记·学习·langchain
hsjiasb5 小时前
FreeRTOS学习(二十六)——动态内存管理heap_1到heap_5
stm32·单片机·学习·学习笔记·freertos
崇子嵘5 小时前
基于zynqMP15eg的linux驱动学习
学习
东风破_6 小时前
ESLint 是什么?为什么你的项目需要它?
前端·后端·代码规范
嘻哈∠※6 小时前
0061基于 SpringBoot 的投稿与稿件处理系统设计与实现
java·spring boot·后端
WWJA王文举6 小时前
I²C通信完整流程详解:START、地址、ACK、数据、Repeated START和STOP一次讲透
c语言·开发语言
卷无止境6 小时前
在 awesome-fastapi 里,哪些库值得一看?
后端·python
zhanghaha13146 小时前
Python进阶教程:6_JSON 数据解析 —— 新手完全指南
开发语言·python·json
知识分享小能手7 小时前
线性代数学习教程,从入门到精通,向量组的线性相关性 — 完整知识点梳理(7)
学习·线性代数·机器学习
卷无止境7 小时前
FastAPI 的Admin面板生态
后端·python