Tag站长知识库:分享、传递知识使我们更快乐,更幸福,更和谐!

最近更新热门图文热门文章全站推荐Tag标签网站地图
您现在的位置:首页 > 程序开发 > GO开发>>Go语言通过内存缓存来提升性能

Go语言通过内存缓存来提升性能

2019-06-17 17:21作者:佚名来源:biancheng.net浏览:16 评论:16

当在进行大量的计算时,提升性能最直接有效的一种方式就是避免重复计算。通过在内存中缓存和重复利用相同计算的结果,称之为内存缓存。最明显的例子就是生成斐波那契数列的程序,代码如下所示:

package mainimport "fmt"func main() {    result := 0    for i := 0; i <= 10; i++ {        result = fibonacci(i)        fmt.Printf("fibonacci(%d) is: %d\n", i, result)    }}func fibonacci(n int) (res int) {    if n <= 1 {        res = 1    } else {        res = fibonacci(n-1) + fibonacci(n-2)    }    return}
要计算数列中第 n 个数字,需要先得到之前两个数的值,但很明显绝大多数情况下前两个数的值都是已经计算过的。即每个更后面的数都是基于之前计算结果的重复计算,正如上面代码所展示的那样。

而我们要做就是将第 n 个数的值存在数组中索引为 n 的位置,然后在数组中查找是否已经计算过,如果没有找到,则再进行计算,下面是计算到第 40 位数字的性能对比:

普通写法:4.730270 秒
内存缓存:0.001000 秒

内存缓存的优势显而易见,而且还可以将它应用到其它类型的计算中,例如使用 map 而不是数组或切片:
package mainimport (    "fmt"    "time")const LIM = 41var fibs [LIM]uint64func main() {    var result uint64 = 0    start := time.Now()    for i := 0; i < LIM; i++ {        result = fibonacci(i)        fmt.Printf("fibonacci(%d) is: %d\n", i, result)    }    end := time.Now()    delta := end.Sub(start)    fmt.Printf("longCalculation took this amount of time: %s\n", delta)}func fibonacci(n int) (res uint64) {    // 记忆化:检查数组中是否已知斐波那契(n)    if fibs[n] != 0 {        res = fibs[n]        return    }    if n <= 1 {        res = 1    } else {        res = fibonacci(n-1) + fibonacci(n-2)    }    fibs[n] = res    return}
内存缓存的技术在使用计算成本相对昂贵的函数时非常有用(不仅限于例子中的递归),譬如大量进行相同参数的运算。这种技术还可以应用于纯函数中,即相同输入必定获得相同输出的函数。

编程帮,一个分享编程知识的公众号。跟着站长一起学习,每天都有进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

文章不深奥,不需要钻研,在公交、在地铁、在厕所都可以阅读,随时随地涨姿势。

文章不涉及代码,不烧脑细胞,人人都可以学习。

当你决定关注「编程帮」,你已然超越了90%的程序员!

编程帮二维码
微信扫描二维码关注

Tags: 责任编辑:Tag站长知识库
顶一下(16)
87.08%

相关文章

  1. Go语言注释的定义及使用(godoc工具提取注释内容)
  2. Go语言结构体内嵌模拟类的继承
  3. Go语言使用图像包制作GIF动画
  4. Go语言sync.Map(在并发环境中使用的map)
  5. Go语言将函数作为返回值
  6. Go按自定义函数排序实例
  7. Go语言表达式求值器
  8. Go语言inject库:依赖注入
  9. Go时间格式化/解析实例
  10. Go语言通过反射获取结构体的成员类型
  11. Go语言通过内存缓存来提升性能
  12. Go语言为并发而生

精彩信息

     

栏目最新

精彩信息

     

热门文章

本类排行

精彩信息