在Go语言中,runtime
包提供了与程序的运行时环境相关的功能。这个包包含了一些控制Go语言程序运行时行为的函数和变量。以下是一些 runtime
包中常用的功能和对象:
Goroutines 和调度器(Goroutines and Scheduler):
go
函数:用于启动一个新的goroutine,以便并发执行函数。GOMAXPROCS
变量:用于设置可同时执行的操作系统线程的最大数量。
内存管理(Memory Management):
GC
函数:手动触发垃圾回收。ReadMemStats
函数:获取内存统计信息。SetFinalizer
函数:设置对象的终结器函数。
并发控制(Concurrency Control):
LockOSThread
和UnlockOSThread
函数:用于将goroutine 绑定到当前线程。NumCPU
函数:获取机器上的CPU核心数量。
错误处理(Error Handling):
Goexit
函数:立即终止调用它的goroutine,不会执行任何deferred函数。
性能分析(Profiling):
CPUProfile
函数:启动或停止 CPU 使用情况的分析。MemProfile
函数:启动或停止内存使用情况的分析。
1.获取信息
package main
import (
"fmt"
"runtime"
)
func main() {
fmt.Println("获取goRoot目录", runtime.GOROOT())
fmt.Println("获取操作系统", runtime.GOOS)
fmt.Println("获取cpu数量", runtime.NumCPU())
}
2.schedule让出时间切片
package main
import (
"fmt"
"runtime"
)
func main() {
go func() {
for i := 0; i < 5; i++ {
fmt.Println("goroutine")
}
}()
for i := 0; i < 5; i++ {
runtime.Gosched() //让出时间片,让别的goroutine先执行,不一定成功
fmt.Println("main")
}
}
3. Goexit结束协程
package main
import (
"fmt"
"runtime"
"time"
)
func main() {
go func() {
fmt.Println("start")
test()
fmt.Println("end")
}()
time.Sleep(time.Second * 5)
//结果
//start
//test defer
}
func test() {
defer fmt.Println("test defer")
runtime.Goexit() //结束调用它的协程
fmt.Println("test")
}