9.9Go语言内存缓存
2021/9/10 7:05:08
本文主要是介绍9.9Go语言内存缓存,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
9.9Go语言内存缓存
什么是内存缓存
概念:
在内存中缓存并重复利用缓存从而避免重复执行相同计算的方式称为内存缓存
普通方法实现斐波那契数列不加内存缓存计算时间
package main import ( "fmt" "time" ) /* 实现一个斐波那契数列,使用递归的方法 */ func fib(n int) (res int) { if n <= 2 { res = 1 }else { res = fib(n-1) + fib(n-2) } return //结束方法 /* 比较消耗内存,而且效率比较低 */ } func main() { result := 0 start := time.Now() for i := 1; i <= 40; i++ { result = fib(i) fmt.Printf("数列第 %d 位: %d\n", i, result) } end := time.Now() delta := end.Sub(start) fmt.Printf("程序的执行时间为: %s\n", delta) }
该方法最终程序的执行时间为:881.0582ms
使用内存缓存的方法实现斐波那契数列
实现思路:
-
在计算得到第 n 个数的同时,将它的值保存到数组中索引为 n 的位置上
-
在后续的计算中先在数组中查找所需要的值是否计算过
-
如果找到了,则直接从数组中获取
-
如果没找到,则再进行计算
-
package main import ( "fmt" "time" ) /* 先预声明一块内存区域,大小比fib数列传入的形参要大 */ const LIM = 41 var fibs [LIM]uint64 //提前声明的一块内存区域 /* 实现fib数列,每次运算之前查询一下内存区域的 */ func fibonacci2(n int) (res uint64) { //记忆化:检查数组中是否已知斐波那契(n) //查询内存缓存 if fibs[n] != 0 { /*fibs赋值给res,下次计算的时候使用res进行计算*/ res = fibs[n] return } if n <= 2 { res = 1 }else { res = fibonacci2(n-1) + fibonacci2(n-2) } fibs[n] = res /* 每一次都从已赋值的内容开始计算,避免了重复计算 */ return } func main() { var result uint64 = 0 start := time.Now() for i := 1; i < LIM; i++ { result = fibonacci2(i) fmt.Printf("数列第 %d 位: %d\n", i, result) } end := time.Now() delta := end.Sub(start) fmt.Printf("程序的执行时间为: %s\n", delta) }
程序的执行时间为: 3.1022ms
可以看到性能提升的几百倍
章节小结:
-
利用预声明的数组存储结果值。在每一次计算完成时都将结果先保存到预先声明的数组中。避免的重复的计算
这篇关于9.9Go语言内存缓存的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15SendGrid 的 Go 客户端库怎么实现同时向多个邮箱发送邮件?-icode9专业技术文章分享
- 2024-11-15SendGrid 的 Go 客户端库怎么设置header 和 标签tag 呢?-icode9专业技术文章分享
- 2024-11-12Cargo deny安装指路
- 2024-11-02MongoDB项目实战:从入门到初级应用
- 2024-11-01随时随地一键转录,Google Cloud 新模型 Chirp 2 让语音识别更上一层楼
- 2024-10-25Google Cloud动手实验详解:如何在Cloud Run上开发无服务器应用
- 2024-10-24AI ?先驱齐聚 BAAI 2024,发布大规模语言、多模态、具身、生物计算以及 FlagOpen 2.0 等 AI 模型创新成果。
- 2024-10-20goland工具下,如修改一个项目的标准库SDK的版本-icode9专业技术文章分享
- 2024-10-17Go学习:初学者的简单教程
- 2024-10-17Go学习:新手入门完全指南