출처: http://golang.jp/pkg/runtime
import "runtime"
runtime 패키지에는 고루틴 제어 기능 등 Go 언어의 런타임 시스템과 상호 작용하는 작업을 다룬다.
또한 reflect 패키지를 이용한 저 레벨의 타입 정보도 다룬다. 런타임 형식 시스템으로의 프로그래밍 인터페이스는 reflect 문서를 참조한다.
상수
GOARCH는 Go 트리가 대상으로하는 아키텍처이다. : 386, amd64, arm
const GOARCH string = theGoarch
GOOS는 Go 트리가 대상으로하는 운영 체제이다. : darwin, freebsd, linux 등
const GOOS string = theGoos
변수
MemProfileRate 메모리 프로파일에 기록 ·보고되는 메모리 할당 비율을 제어한다. 프로파일러는 MemProfileRate 바이트를 할당할 때마다 평균 한 번 샘플을 취득한다.
할당한 모든 블록을 프로필에 포함하려면 MemProfileRate에 1을 설정한다. 또한 프로필 기능을 완전히 off 하려면 MemProfileRate는 0으로 설정한다.
이 메모리 프로파일을 처리하는 도구는 프로그램의 생존 중에 프로파일 비율 값이 현재 값대로 바뀔 것은 없다고 간주한다. 따라서 이 메모리 프로파일 비율을 변경하는 프로그램은 가능한 이른 시일 내에 한 번만 변경을 수행해야한다. (예를 들어 main의 처음 등)
var MemProfileRate int = 512 * 1024
Alloc 함수
func Alloc(uintptr) *byte
Alloc는 지정된 블록 크기를 할당한다. 이것은 테스트 및 디버깅 목적으로만 사용해야한다.
Breakpoint 함수
func Breakpoint()
Breakpoint () 중단점 트랩을 실행한다.
Caller 함수
func Caller(skip int) (pc uintptr, file string, line int, ok bool)
Caller는 호출한 고루틴 스택에서 실행하는 함수의 파일과 줄 번호 정보를 보고한다. 인수 skip은 인상 스택 프레임 수이며, 이것은 0을 지정했을 때는 Caller를 호출한 스택 청구된다. 반환 값은 프로그램 카운터, 파일 이름, 파일에서 호출 한 코드의 행 번호를 보고한다. 정보를 반환하지 않았을 때는 논리 값 ok가 false가 반환된다.
Callers 함수
func Callers(skip int, pc []uintptr) int
Callers는 호출한 고루틴 스택에서 실행하는 함수의 프로그램 카운터를 슬라이스 pc에 넣는다. 인수 skip은 기록하기 전에 건너 뛰기 스택 프레임 수를 지정한다. 이것에 0을 지정했을 때는 Callers를 호출한 스택 청구된다. 이 함수는 pc에 기록된 건수를 돌려준다.
Cgocalls 함수
func Cgocalls() int64
Cgocalls는 현재 프로세스에서 cgo 호출한 횟수를 반환한다.
Free 함수
func Free(*byte)
Free는 지정된 포인터 위치에서 시작하는 블록을 해제한다. 이것은 테스트 및 디버깅 목적으로만 사용해야 한다.
GC 함수
func GC()
GC 가비지 수집을 수행한다.
GOMAXPROCS 함수
func GOMAXPROCS(n int) int
GOMAXPROCS는 동시에 최대 실행 가능한 CPU 수를 설정하고 이전에 설정했던 값을 반환한다. n <1 일 때, 현재의 설정은 변경되지 않는다. 스케줄러가 개선 되면 이 호출은 불필요하다.
GOROOT 함수
func GOROOT() string
GOROOT는 Go 트리의 루트를 돌려준다. 이것이 설정되어 있으면 GOROOT 환경 변수를 사용하고, 설정되어 있지 않으면 Go를 빌드 할 때의 경로를 사용한다.
Goexit 함수
func Goexit()
Goexit는 호출 고루틴을 종료한다. 다른 고루틴에는 영향을 미치지 않는다. Goexit는 고루틴을 종료하기 전에 모든 지연 (defer) 호출을 실행한다.
Goroutines 함수
func Goroutines() int32
Goroutines은 현존하는 고루틴의 수를 돌려준다.
Gosched 함수
func Gosched()
Gosched는 프로세서를 넘겨서 다른 고루틴이 실행되도록 한다. 현재의 고루틴이 중단되는 것이 아니라 자동으로 실행을 재개한다.
LockOSThread 함수
func LockOSThread()
LockOSThread는 운영 체제의 현재 스레드와 이 함수를 호출 한 고루틴을 연결한다. 호출 고루틴이 종료되거나 또는 UnlockOSThread가 호출 될 때까지 항상 그 스레드에서 실행된다. 한편, 다른 고루틴 은 이 스레드에서 실행되지 않는다. LockOSThread는 init 함수 내에서는 사용할 수 없다.
Lookup 함수
func Lookup(*byte) (*byte, uintptr)
Lookup은 지정된 포인터를 포함하는 블록 기반과 사이즈를 돌려준다. 이것은 테스트 및 디버깅 목적으로만 사용한다.
MemProfile 함수
func MemProfile(p []MemProfileRecord, inuseZero bool) (n int, ok bool)
MemProfile는 n에 현재의 메모리 프로파일의 기록 수를 돌려준다. len(p) >= n의 경우 프로필을 p에 복사하고, n, true를 돌려준다. len(p) < n 이면 p는 변경하지 않고 n, false를 돌려준다.
inuseZero가 true의 경우, 프로파일은 r.AllocBytes > 0 이고 r.AllocBytes == r.FreeBytes가 아닌 할당의 기록이 포함되어 있다. 이것은 메모리가 할당된 후 이미 해제된 런타임에 반환된 영역이다.
Semacquire 함수
func Semacquire(s *uint32)
Semacquire는 *s > 0 이 될 때까지 기다린 후 그 값을 원자적으로 감소한다. 이것은 동기화 라이브러리에서의 사용을 상정한 원시적인 sleep 루틴이며, 직접 사용해서는 안된다.
Semrelease 함수
func Semrelease(s *uint32)
Semrelease는 *s를 원자 적으로 증가하고 Semacquire에서 차단된 고루틴에 통지한다. 이것은 동기화 라이브러리에서의 사용을 상정한 원시적인 wakeup 루틴이며, 직접 사용해서는 안된다.
SetFinalizer 함수
func SetFinalizer(x, f interface{})
SetFinalizer는 x에 종료자 f를 x 연결한다. 가비지 컬렉터가 종료자가 연관된 도달 불가한 블록을 발견하면 연결을 지우고 f(x)를 다른 고루틴에서 실행한다. 새로운 고루틴을 작성하여 x는 다시 도달 가능하지만, 종료자는 가지지 않는다. 이대로 SetFinalizer가 다시 호출되지 않으면 다음 가비지 컬렉터가 x가 도달 불가능 함을 발견했을 때 x는 해제된다.
SetFinalizer (x, nil)로 하면 x에 연관된 모든 종료자가 지워진다.
인수 x는 new를 호출하여 할당한 객체에 대한 포인터 또는 복합 리터럴에서 얻은 주소이어야한다. 인수 f는 x와 같은 형태의 인수를 하나만 잡고, 반환 값을 반환하지 않는 함수이어야 한다. 이 두 조건이 모두 충족되지 않을 때 SetFinalizer 프로그램을 도중에 종료한다.
종료자는 다음과 같은 순서로 동작한다.
A가 B를 참조하고, 쌍방이 종료자가 있고, 또 다른쪽에서는 도달 불가한 경우는 A의 종료자만 실행된다. 이 후 A가 해제되면 B의 종료가 실행된다. 순환 구조에 종료자를 가지는 블록이 존재하는 경우, 이 주기가 가비지 수집되는 보장은 되지 않으며 종료자가 실행되는 것도 보증되지 않는다. 이것은 종속성 순서가 정해지지 않기 때문이다.
x가 도달 할 수 없게 된 후 x의 종료자는 약간 늦게 실행되도록 예약된다. 프로그램이 종료하기 전에 종료자가 반드시 실행된다는 보장이 없으므로, 종료자는 일반적으로 장기 실행 프로그램의 비 메모리 자원을 해제하는 목적으로만 사용된다. 예를 들어 os.File 객체는 프로그램이 Close를 호출하지 않고 이 오브젝트를 파기 할 때 내부적으로 가지는 운영 체제의 파일 서술자를 닫기 위해 종료자가 사용되지만 bufio.Writer 처럼 메모리 내부 I/O를 버퍼링하고 있는 객체의 flash를 종료자에 의존하게 되면 프로그램 종료 시 버퍼가 flash 되지 않기 때문에 잘못된 사용 방법이다.
프로그램 내에서 모든 종료자는 동일한 고루틴에서 실행된다. 따라서 종료자 처리 시간이 길어지는 경우에는 새로운 고루틴을 시작하고 거기서 처리를 실시 할 필요가 있다.
TODO (rsc) : allow f to have (ignored) return values
Siginit 함수
func Siginit()
Siginit는 Sigrecv을 이용한 시그널 수신을 활성화한다. 이것은 일반적으로 초기화 중에 호출해야한다.
Signame 함수
func Signame(sig int32) string
Signame는 시그널을 나타내는 문자열을 반환한다. 알 수 없는 신호의 경우에는 ""가 반환된다.
Sigrecv 함수
func Sigrecv() uint32
Sigrecv는 이전 Sigrecv를 호출한 후 도착한 시그널의 비트 마스크를 돌려준다. 이 함수는 하나 이상의 시그널이 닿을 때까지 블록한다.
UnlockOSThread 함수
func UnlockOSThread()
UnlockOSThread는 이 함수를 호출 한 고루틴을 고정하고 있던 운영 체제 스레드에서 분리한다. 호출 고루틴이 LockOSThread를 호출하지 않았을 때는 아무것도 실시하지 않는다.
Version 함수
func Version() string
Version은 Go 트리의 버전 문자열을 반환한다. 이것은 일련 번호와 가능하다면 "release.2010-03-04" 라는 발표 태그가 포함된다. 뒤에 + 기호는 빌드 시에 트리가 로컬에서 변경 되고 있었다는 것을 나타낸다.
ArrayType 타입
ArrayType 고정 배열 형을 나타낸다.
type ArrayType struct {
// contains unexported fields
}
BoolType 타입
BoolType은 Bool을 나타낸다.
type BoolType commonType
ChanDir 타입
ChanDir 채널 타입의 방향을 나타낸다.
type ChanDir int |
ChanType 타입
ChanType는 채널 타입을 나타낸다.
type ChanType struct { |
ComplexType 타입
ComplexType은 complex 타입을 나타낸다.
type ComplexType commonType
Error 타입
Error 인터페이스는 런타임 오류를 식별한다.
type Error interface { |
FloatType 타입
FloatType는 float 타입을 나타낸다.
type FloatType commonType
Func 타입
type Func struct { |
FuncForPC 함수
func FuncForPC(pc uintptr) *Func
FuncForPC는 지정된 프로그램 카운터를 가진 함수의 정보 또는 nil을 *Func 으로 반환한다.
(*Func) Entry 함수
func (f *Func) Entry() uintptr
Entry는 함수의 엔트리 주소를 반환한다.
(*Func) FileLine 함수
func (f *Func) FileLine(pc uintptr) (file string, line int)
FileLine는 프로그램 카운터 pc와 해당 파일 이름과 소스의 행 번호를 반환한다. pc가 f의 프로그램 카운터가 아닌 경우, 결과는 정확한 값이 아니다.
(*Func) Name 함수
func (f *Func) Name() string
Name은 함수 이름을 돌려준다.
FuncType 타입
FuncType 함수형을 나타냅니다.
type FuncType struct { |
IntType 타입
IntType는 int를 나타냅니다.
type IntType commonType
InterfaceType 타입
InterfaceType는 인터페이스 타입을 나타냅니다.
type InterfaceType struct { |
Itable 타입
* Must match iface.c : / Itab and compilers. * 참고 :이 버전에서는 리플렉션 코드가 사용되고 있습니다 만, iface_defs.go의 다른 버전은 기존의 C 언어 버전에 가까운되어 있습니다.
type Itable struct { |
MapType 타입
MapType은 맵 유형을 나타냅니다.
type MapType struct { |
MemProfileRecord 타입
MemProfileRecord는 특정 호출 순서(스택 추적)에 의해 할당 되어 생존 중인 오브젝트의 정보이다.
type MemProfileRecord struct { |
(*MemProfileRecord) InUseBytes 함수
func (r *MemProfileRecord) InUseBytes() int64
InUseBytes는 사용한 바이트 수를 돌려준다. (AllocBytes - FreeBytes)
(*MemProfileRecord) InUseObjects 함수
func (r *MemProfileRecord) InUseObjects() int64
InUseObjects는 사용중인 개체 수를 돌려준다. (AllocObjects - FreeObjects)
(*MemProfileRecord) Stack 함수
func (r *MemProfileRecord) Stack() []uintptr
Stack은 r.Stack0에 기록된 스택 트레이스를 돌려준다.
MemStatsType 타입
type MemStatsType struct { |
MemStats는 메모리 시스템에 대한 통계를 유지한다. 이러한 통계 값은 개산이며, 각각 연동한 업데이트는 하지 않는다.
var MemStats MemStatsType
PtrType 타입
PtrType 포인터 형을 나타냅니다.
type PtrType struct { |
SliceType 타입
SliceType 슬라이스 형을 나타냅니다.
type SliceType struct { |
StringType 타입
StringType는 문자열을 나타냅니다.
type StringType commonType
StructType 타입
StructType는 구조체를 나타냅니다.
type StructType struct { |
Type 타입
하늘 인터페이스 값을 만들 수는 컴파일시뿐입니다. (비어 있지 않은 인터페이스 값은 초기화에 의해 만들어집니다) Type은 빈 인터페이스이기 때문에 컴파일러는 여기에 데이터로 참조를 배치 할 수 있습니다.
type Type interface {}
TypeAssertionError 형
TypeAssertionError는 형식 주장에 실패한 원인을 밝혀합니다.
type TypeAssertionError struct { |
(*TypeAssertionError) Asserted 함수
func (e *TypeAssertionError) Asserted() Type
Asserted는 형식 주장 할 때 잘못 지정된 형태를 돌려줍니다.
(*TypeAssertionError) Concrete 함수
func (e *TypeAssertionError) Concrete() Type
Concrete은 실패한 형식 주장의 실제 형태를 돌려줍니다. 인터페이스 값이 nil이면 Concrete는 nil을 반환합니다.
(*TypeAssertionError) MissingMethod 함수
func (e *TypeAssertionError) MissingMethod() string
형식 주장이 인터페이스 형식에 대해 행해진 때 MissingMethod는 그 인터페이스 형을 충족하기 위해 필요하지만 구현되지 않은 메소드 명을 돌려줍니다. 해당 메소드가 복수 존재하는 경우에는 그 중 하나를 반환합니다. 이 때 어느 것이 돌려 주어 질까는 규정되어 있지 않습니다. 형식 주장이 인터페이스 유형에 대해 수행되지 않은 경우 빈 문자열이 반환됩니다.
(*TypeAssertionError) RuntimeError 함수
func (*TypeAssertionError) RuntimeError()
(*TypeAssertionError) String 함수
func (e *TypeAssertionError) String() string
UintType 타입
UintType는 uint 유형을 나타냅니다.
type UintType commonType
UintptrType 타입
UintptrType는 uintptr 형을 나타냅니다.
type UintptrType commonType
UnsafePointerType 타입
UnsafePointerType는 unsafe.Pointer 형을 나타냅니다.