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

相关推荐
点心的游戏开发世界8 小时前
Unity C# 脚本学习笔记:命名空间与 using
学习·unity·c#
2601_962071578 小时前
【Java报错已解决】org.springframework.beans.factory.BeanCreationException
java·开发语言
香芋芋圆9 小时前
AI 冲击内卷之下,普通前端如何破局?WebGIS—— 低门槛突围赛道
前端·javascript·人工智能·学习·职场发展
淡海水9 小时前
07-04-并发-ConcurrentBag-T-工作窃取WorkStealing算法
开发语言·算法·c#·bag·concurrent·workstealing
点心的游戏开发世界9 小时前
Unity C# 脚本学习笔记:泛型
学习·unity·c#
CS_Zero10 小时前
C语言sizeof是函数吗?
c语言·开发语言
东风破_10 小时前
从跨域到 WebSocket:前端跨域方案、SSE 与双向实时通信详解
前端·后端
tju新生代魔迷11 小时前
Verilog HDL 学习笔记(十三)| 第13章 编程语言接口(PLI)
笔记·学习
-今昭-11 小时前
《V2V 迁移实战:将 VMware 虚拟机转为 OpenStack 可用 Glance qcow2 镜像》
开发语言·python
行百里er12 小时前
Gateway 上别硬塞 MVC:DeferredImportSelector 看菜下锅
spring boot·后端·开源