>백엔드 개발 >Golang >golang의 스택을 보는 방법

golang의 스택을 보는 방법

(*-*)浩
(*-*)浩원래의
2019-12-14 13:46:103728검색

golang의 스택을 보는 방법

데이터 구조 스택:

힙: 힙은 힙 정렬과 같이 트리로 볼 수 있습니다. 대기열에서 스케줄러는 반복적으로 대기열의 첫 번째 작업을 추출하고 실행합니다. 실제로 일부 짧은 작업은 종료되는 데 오랜 시간을 기다리거나 짧지는 않지만 중요한 일부 작업도 우선 순위를 가져야 하기 때문입니다.

Heap은 이러한 문제를 해결하기 위해 설계된 데이터 구조입니다. >                (권장 학습: go)

스택: 선입 후출 데이터 구조입니다.

스택 캐싱 방법

스택은 일반적으로 호출 시 저장 공간에 있다가 호출이 완료되면 즉시 해제됩니다.

힙은 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은 간단한 프로그램이며, 주 함수는 5행에서 예제 함수를 호출합니다. 예제 함수는 9행에서 선언됩니다. 이 함수에는 문자열 슬라이스, 문자열 및 정수라는 세 가지 매개 변수가 있습니다. 메서드 본문도 매우 간단합니다. 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

스택 추적 정보:

첫 번째 줄은 실행 중인 고루틴이 고루틴임을 보여줍니다. ID가 1 입니다.

두 번째 줄 debug.Stack()이 호출됩니다.

네 번째 줄 debug.PrintStack()이 호출됩니다.

여섯 번째 줄은 debug.PrintStack()이 호출되는 코드 위치로, 메인 메뉴 아래의 예제 함수에 있습니다. 패키지. 또한 코드가 있는 파일과 경로, debug.PrintStack()이 발생하는 줄 번호(10줄)도 표시됩니다.

8번째 줄은 메인 패키지의 메인 함수인 예제도 호출하는 함수 이름입니다. 또한 파일 이름과 경로, 그리고 예제 함수가 호출된 줄 번호도 표시됩니다.

위 내용은 golang의 스택을 보는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.