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

相关推荐
小鹿软件办公1 小时前
倒计时开启:Chromium 宣布几周内将全面切断 MV2 扩展支持
开发语言·javascript·ublock origin
淮南颂恩少儿编程C++1 小时前
在淮南:编程信息学培训与 C++ 信奥赛:从 CSP 到 NOI 的进阶之路
人工智能·学习·青少年编程
摇滚侠2 小时前
SpringMVC 入门到实战 HttpMessageConverter 65-74
java·后端·spring·intellij-idea
codecrafter1232 小时前
sh:在 Python 里直接调系统命令
开发语言·python·其他
Luminous.2 小时前
C语言--day29
c语言·开发语言
逢君学术论文AI写作2 小时前
Java第24课:会话技术CookieSession
java·开发语言
小小编程路2 小时前
字符串转数字时,可能会遇到哪些问题?
java·开发语言·算法
许彰午2 小时前
责任链模式实战——同一个框架里的两种链
java·开发语言·责任链模式
寻道码路2 小时前
LangChain4j Java AI 应用开发实战(十四):手写 RAG 全流程 - 深入理解每个环节
java·开发语言·人工智能·ai