运行调度器是个非常有用的东西,关于运行时包几个方法:
-
<李> Gosched:让当前线程让出cpu以让其它线程运行,它不会挂起当前线程,因此当前线程未来会继续执行李>
<李> NumCPU:返回当前系统的CPU核数量李>
<李> GOMAXPROCS:设置最大的可同时使用的CPU核数李>
<李> Goexit:退出当前goroutine(但是推迟语句会照常执行)李>
<李> NumGoroutine:返回正在执行和排队的任务总数李>
<李>美好:目标操作系统李>
<强> NumCPU 强>
主要包 导入( “fmt” “运行时” ) 函数main () { fmt。Println (“cpu:“, runtime.NumCPU ()) fmt。Println (“goroot:“, runtime.GOROOT ()) fmt。Println(“档案:“runtime.GOOS) } >之前运行结果:
<强> GOMAXPROCS 强>
Golang默认所有任务都运行在一个cpu核里,如果要在goroutine中使用多核,可以使用运行时。GOMAXPROCS函数修改,当参数小于1时使用默认值。
主要包 导入( “fmt” “运行时” ) func init () { runtime.GOMAXPROCS (1) } 函数main () {//任务逻辑…… } >之前<强> Gosched
强>这个函数的作用是让当前goroutine让出CPU、当一个goroutine发生阻塞,就会自动地把与该goroutine处于同一系统线程的其他goroutine转移到另一个系统线程上去,以使这些goroutine不阻塞
主要包 导入( “fmt” “运行时” ) func init () { runtime.GOMAXPROCS(1)//使用单核 } 函数main () { 退出:=让陈(int) 去func () { 延迟关闭(退出) 去func () { fmt.Println (“b”) }() }() 我:=0;我& lt;4;我+ + { fmt。Println(“:”,我) 如果我==1 { runtime.Gosched()//切换任务 } } & lt;退出 } >之前结果:
使用多核测试:
主要包 导入( “fmt” “运行时” ) func init () { runtime.GOMAXPROCS(4)//使用多核 } 函数main () { 退出:=让陈(int) 去func () { 延迟关闭(退出) 去func () { fmt.Println (“b”) }() }() 我:=0;我& lt;4;我+ + { fmt。Println(“:”,我) 如果我==1 { runtime.Gosched()//切换任务 } } & lt;退出 } >之前结果:
根据你机器来设定运行时的核数,但是运行结果不一定与上面相同,或者在主要函数的最后加上选择{}让程序阻塞,则结果如下:
多核比较适合那种CPU密集型程序,如果是IO密集型使用多核会增加CPU切换的成本。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
Golang中运行时的使用详解