• 技术文章 >后端开发 >Golang

    golang的堆栈怎么看

    (*-*)浩(*-*)浩2019-12-14 13:46:10原创2232

    php入门到就业线上直播课:进入学习

    数据结构的堆栈:

    堆:堆可以被看成是一棵树,如:堆排序。在队列中,调度程序反复提取队列中第一个作业并运行,因为实际情况中某些时间较短的任务将等待很长时间才能结束,或者某些不短小,但具有重要性的作业,同样应当具有优先权。

    堆即为解决此类问题设计的一种数据结构。 (推荐学习:go

    栈:一种先进后出的数据结构。

    堆栈缓存方式

    栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。

    堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。

    堆栈跟踪

    下面讨论堆栈跟踪信息以及如何在堆栈中识别函数所传递的参数。

    以下测试案例的版本是Go 1.11

    示例:

    package main
    import "runtime/debug"
    func main() {
       slice := make([]string, 2, 4)
       Example(slice, "hello", 10)
    }
    func Example(slice []string, str string, i int) {
       debug.PrintStack()
    }

    列表1是一个简单的程序, main函数在第5行调用Example函数。Example函数在第9行声明,它有三个参数,一个字符串slice,一个字符串和一个整数。它的方法体也很简单,只有一行,debug.PrintStack(),这会立即产生一个堆栈跟踪信息:

    goroutine 1 [running]:
    runtime/debug.Stack(0x1, 0x0, 0x0)
        C:/Go/src/runtime/debug/stack.go:24 +0xae
    runtime/debug.PrintStack()
        C:/Go/src/runtime/debug/stack.go:16 +0x29
    main.Example(0xc000077f48, 0x2, 0x4, 0x4abd9e, 0x5, 0xa)
        D:/gopath/src/example/example/main.go:10 +0x27
    main.main()
        D:/gopath/src/example/example/main.go:7 +0x79

    堆栈跟踪信息:

    第一行显示运行的goroutine是id为 1的goroutine。

    第二行 debug.Stack()被调用

    第四行 debug.PrintStack() 被调用

    第六行 调用debug.PrintStack()的代码位置,位于main package下的Example函数。它也显示了代码所在的文件和路径,以及debug.PrintStack()发生的行数(第10行)。

    第八行 也调用Example的函数的名字,它是main package的main函数。它也显示了文件名和路径,以及调用Example函数的行数。

    以上就是golang的堆栈怎么看的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:golang
    上一篇:golang不适合开发web吗 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • golang中“=”与“:=”的区别• 详解golang中的不定参数• 关于golang中的错误处理机制的详细介绍• golang查找文件是否存在的方法
    1/1

    PHP中文网