package main
import (
"fmt"
"runtime"
"time"
)
//写在init函数里,main函数运行之前就先设置cpu
func init() {
//获取逻辑cpu的数量
fmt.Println("逻辑CPU的数量-->", runtime.NumCPU()) //逻辑CPU的数量--> 12
//设置go程序执行的最大的cpu的数量:数值在[1,256]
n := runtime.GOMAXPROCS(runtime.NumCPU())
fmt.Println(n) //12
}
func main() {
//获取goroot目录
fmt.Println("GOROOT-->", runtime.GOROOT()) //C:\Go
//获取操作系统
fmt.Println("os/platform-->", runtime.GOOS) //dos/platform--> windows
//gosched 让当前线程让出 `cpu` 以让其它线程运行,它不会挂起当前线程,因此当前线程未来会继续执行
go func(){
for i:=0;i<5;i++{
fmt.Println("goroutine...")
}
}()
for i:=0;i<4;i++{
//让出时间片,先让别的goroutine执行
runtime.Gosched()
fmt.Println("main...")
}
//创建goroutine
go func() {
fmt.Println("goroutine开始。。")
//调用fun
fun()
fmt.Println("goroutine结束。。。")
}()
//睡一会儿
time.Sleep(3 * time.Second)
}
func fun() {
defer fmt.Println("derfer...")
//return //终止函数
runtime.Goexit() //终止当前的goroutine
fmt.Println("fun函数。。。")
}