首頁  >  文章  >  後端開發  >  golang的堆疊怎麼看

golang的堆疊怎麼看

(*-*)浩
(*-*)浩原創
2019-12-14 13:46:103628瀏覽

golang的堆疊怎麼看

資料結構的堆疊:

堆疊:堆可以被看成是一棵樹,如:堆排序。在佇列中,調度程序反覆提取佇列中第一個作業並運行,因為實際情況中某些時間較短的任務將等待很長時間才能結束,或者某些不短小,但具有重要性的作業,同樣應具有優先權。

堆即為解決此類問題設計的一種資料結構。                        (建議學習: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