从零开始学Go之并发(一):Go程

Go 程(goroutine)是由 Go 运行时管理的轻量级线程。

当一个goroutine创建时,会和其他goroutine一起并发运行, goroutine 由 Go 程序运行时的调度和管理。

Go 程序从 main 包的 main() 函数开始,在程序启动时,Go 程序就会为 main() 函数创建一个默认的 goroutine

所有 goroutine 在 main() 函数结束时会一同结束。

Go 程在相同的地址空间中运行,因此在访问共享的内存时必须进行同步。

 

创建:

go 函数名( 参数列表 )

go say("world")

使用 go 关键字创建 goroutine 时,被调用函数的返回值会被忽略。

如果需要在 goroutine 中返回数据,请使用后面介绍的通道(channel)特性,通过通道把数据从 goroutine 中作为返回值传出。

 

匿名函数创建:

go func(参数列表){

函数体

}(调用参数列表)

go func(s string) {
 for i := 0; i < 5; i++ {
  time.Sleep(100 * time.Millisecond)
  fmt.Println(s)
 }
}("hello")

 

调整并发的运行性能:

Go 地中也可以通过 runtime.GOMAXPROCS() 函数做到

runtime.GOMAXPROCS(逻辑CPU数量)

这里的逻辑CPU数量可以有如下几种数值:

<1:不修改任何数值

=1:单核心执行

>1:多核并发执行

一般情况下,可以使用 runtime.NumCPU() 查询 CPU 数量,并使用 runtime.GOMAXPROCS() 函数进行设置,例如:

runtime.GOMAXPROCS(runtime.NumCPU())

从 Go 1.5 版本开始,默认执行上面语句以便让代码并发执行,最大效率地利用 CPU。

posted @ 2019-07-02 12:36  VingB2by  阅读(373)  评论(0编辑  收藏  举报