Stapel von Datenstrukturen:
Heap: Der Heap kann als Baum betrachtet werden, z. B.: Heap-Sortierung. In der Warteschlange extrahiert der Scheduler wiederholt den ersten Job in der Warteschlange und führt ihn aus, da einige kurze Aufgaben in Wirklichkeit lange auf ihr Ende warten, oder einige Jobs, die nicht kurz, aber wichtig sind, ebenfalls Priorität haben sollten.
Heap ist eine Datenstruktur, die zur Lösung solcher Probleme entwickelt wurde. (Empfohlenes Lernen: go)
Stack: eine First-in-Last-out-Datenstruktur.
Stapel-Caching-Methode
Der Stapel verwendet einen Cache der ersten Ebene. Sie befinden sich normalerweise beim Aufruf im Speicherplatz und werden sofort nach Abschluss des Aufrufs freigegeben .
Der Heap wird im Cache der zweiten Ebene gespeichert und der Lebenszyklus wird durch den Garbage-Collection-Algorithmus der virtuellen Maschine bestimmt (Sobald es zu einem verwaisten Objekt wird, kann es nicht recycelt werden). Daher ist die Geschwindigkeit beim Aufrufen dieser Objekte relativ gering.
Stack-Trace
Im Folgenden werden Stack-Trace-Informationen und die Identifizierung von Argumenten erläutert, die an eine Funktion auf dem Stack übergeben werden.
Die Version des folgenden Testfalls ist Go 1.11
Beispiel:
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() }
Listing 1 ist ein einfaches Programm, die Hauptfunktion ruft die Beispielfunktion in Zeile 5 auf. Die Beispielfunktion wird in Zeile 9 deklariert. Sie verfügt über drei Parameter, einen String-Slice, einen String und eine Ganzzahl. Sein Methodenkörper ist ebenfalls sehr einfach, mit nur einer Zeile, debug.PrintStack(), die sofort einen Stack-Trace generiert:
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
Stack-Trace:
Eins Zeile zeigt, dass die laufende Goroutine die Goroutine mit der ID 1 ist.
Die zweite Zeile debug.Stack() wird aufgerufen
Die vierte Zeile debug.PrintStack() wird aufgerufen
Die sechste Zeile ruft debug.PrintStack() auf. die Beispielfunktion, die sich unter dem Hauptpaket befindet. Außerdem werden die Datei und der Pfad angezeigt, in denen sich der Code befindet, sowie die Zeilennummer, in der debug.PrintStack() auftritt (Zeile 10).
Die achte Zeile ruft auch den Namen der Funktion „Beispiel“ auf, bei der es sich um die Hauptfunktion des Hauptpakets handelt. Außerdem werden der Dateiname und der Pfad sowie die Zeilennummer angezeigt, in der die Beispielfunktion aufgerufen wurde.
Das obige ist der detaillierte Inhalt vonSo zeigen Sie Golangs Stack an. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!