Golang中运行时的使用详解

  

运行调度器是个非常有用的东西,关于运行时包几个方法:

  
      <李> 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)   }      之前      

运行结果:

  

 Golang中运行时的使用详解

  

<强> 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;退出      }      之前      

结果:   

 Golang中运行时的使用详解

  

使用多核测试:

        主要包      导入(   “fmt”   “运行时”   )      func init () {   runtime.GOMAXPROCS(4)//使用多核   }      函数main () {   退出:=让陈(int)   去func () {   延迟关闭(退出)   去func () {   fmt.Println (“b”)   }()   }()      我:=0;我& lt;4;我+ + {   fmt。Println(“:”,我)      如果我==1 {   runtime.Gosched()//切换任务   }   }   & lt;退出      }      之前      

结果:   

 Golang中运行时的使用详解

  

根据你机器来设定运行时的核数,但是运行结果不一定与上面相同,或者在主要函数的最后加上选择{}让程序阻塞,则结果如下:

  

 Golang中运行时的使用详解

  

多核比较适合那种CPU密集型程序,如果是IO密集型使用多核会增加CPU切换的成本。

  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

Golang中运行时的使用详解