GO基础进阶篇 (八)、runtime包

在Go语言中,runtime 包提供了与程序的运行时环境相关的功能。这个包包含了一些控制Go语言程序运行时行为的函数和变量。以下是一些 runtime 包中常用的功能和对象:

  1. Goroutines 和调度器(Goroutines and Scheduler):

    • go 函数:用于启动一个新的goroutine,以便并发执行函数。
    • GOMAXPROCS 变量:用于设置可同时执行的操作系统线程的最大数量。
  2. 内存管理(Memory Management):

    • GC 函数:手动触发垃圾回收。
    • ReadMemStats 函数:获取内存统计信息。
    • SetFinalizer 函数:设置对象的终结器函数。
  3. 并发控制(Concurrency Control):

    • LockOSThreadUnlockOSThread 函数:用于将goroutine 绑定到当前线程。
    • NumCPU 函数:获取机器上的CPU核心数量。
  4. 错误处理(Error Handling):

    • Goexit 函数:立即终止调用它的goroutine,不会执行任何deferred函数。
  5. 性能分析(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")
}

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>