データ構造スタック:
ヒープ: ヒープは、ヒープ ソートなどのツリーとしてみなすことができます。キュー内では、スケジューラはキュー内の最初のジョブを繰り返し抽出して実行します。これは、実際には、一部の短いタスクが終了するまで長時間待機するか、短くはないが重要なジョブも優先される必要があるためです。
Heap は、このような問題を解決するために設計されたデータ構造です。 (推奨学習: Go )
スタック: 高度なデータ構造。
スタック キャッシュ メソッド
スタックは 1 次キャッシュを使用します。通常、キャッシュは呼び出されたときにストレージ領域にあり、呼び出しの直後に解放されます。完成しました。
ヒープは 2 次キャッシュに格納され、ライフサイクルは仮想マシンのガベージ コレクション アルゴリズムによって決定されます (孤立オブジェクトになった後はリサイクルできるわけではありません)。したがって、これらのオブジェクトを呼び出す速度は比較的遅くなります。
スタック トレース
以下では、スタック トレース情報と、スタック上の関数に渡されるパラメーターを識別する方法について説明します。
次のテスト ケースのバージョンは 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 行目で宣言されています。この関数には、文字列スライス、文字列、整数の 3 つのパラメータがあります。メソッド本体も非常にシンプルで、debug.PrintStack() という 1 行だけで、すぐにスタック トレース情報を生成します:
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
スタック トレース情報:
# 1 行は、実行中の goroutine が ID 1 の goroutine であることを示しています。 2 行目 debug.Stack() が呼び出されます 4 行目 debug.PrintStack() が呼び出されます 6 行目は debug.PrintStack() code location を呼び出します。 Example 関数はメイン パッケージの下にあります。また、コードが配置されているファイルとパス、および debug.PrintStack() が発生する行番号 (行 10) も表示されます。 8 行目では、関数 Example の名前も呼び出しています。これは、メイン パッケージのメイン関数です。また、ファイル名とパス、および Example 関数が呼び出された行番号も表示されます。以上がgolang のスタックを表示する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。