Golang runtime运行时

简要概念

  • Gosched:让当前线程让出 cpu 以让其它线程运行,它不会挂起当前线程,因此当前线程未来会继续执行
  • NumCPU:返回当前系统的 CPU 核数量
  • GOMAXPROCS:设置最大的可同时使用的 CPU 核数
  • Goexit:退出当前 goroutine(但是defer语句会照常执行)
  • NumGoroutine:返回正在执行和排队的任务总数
  • GOOS:目标操作系统

NumCPU NumGoroutine GOOS

func runtimeInfo()  {runtime.GOMAXPROCS(1)fmt.Println(runtime.NumCPU()) // 返回当前cpu核心数fmt.Println(runtime.NumGoroutine()) // 返回正在执行和排队的任务数fmt.Println(runtime.GOOS) // 返回当前操作系统
}

Gosched

func runtimeGosched()  {go func (s string)  {for i := 0; i < 4; i ++{fmt.Println(s)}}("world")for i := 0; i < 4; i ++{runtime.Gosched()fmt.Println("hello")}
}

Goexit

func runtimeGoexit()  {go func ()  {fmt.Println(111)defer fmt.Println("A defer")func ()  {defer fmt.Println("B.defer")runtime.Goexit()defer fmt.Println("C.defer")fmt.Println("B")}()fmt.Println("A")}()for{}
}