diff --git a/ebook/02.7.md b/ebook/02.7.md index 87d18f5d..eafaf9f8 100644 --- a/ebook/02.7.md +++ b/ebook/02.7.md @@ -1,10 +1,10 @@ # 2.7 并发 -有人把Go比作21世纪的C语言,第一是因为Go语言设计简单,第二,21世纪最重要的就是并行程序设计,而GO从语言层面就支持了并行。 +有人把Go比作21世纪的C语言,第一是因为Go语言设计简单,第二,21世纪最重要的就是并行程序设计,而Go从语言层面就支持了并行。 ## goroutine -goroutine是Go并行设计的核心。goroutine说到底其实就是线程,但是他比线程更小,十几个goroutine可能体现在底层就是五六个线程,Go语言内部帮你实现了这些goroutine之间的内存共享。执行goroutine只需极少的栈内存(大概是4~5KB),当然会根据相应的数据伸缩。也正因为如此,可同时运行成千上万个并发任务。goroutine比thread更易用、更高效、更轻便。 +goroutine是Go并行设计的核心。goroutine说到底其实就是线程,但是它比线程更小,十几个goroutine可能体现在底层就是五六个线程,Go语言内部帮你实现了这些goroutine之间的内存共享。执行goroutine只需极少的栈内存(大概是4~5KB),当然会根据相应的数据伸缩。也正因为如此,可同时运行成千上万个并发任务。goroutine比thread更易用、更高效、更轻便。 goroutine是通过Go的runtime管理的一个线程管理器。goroutine通过`go`关键字实现了,其实就是一个普通的函数。 @@ -159,7 +159,7 @@ channel通过操作符`<-`来接收和发送数据 case c <- x: x, y = y, x + y case <-quit: - fmt.Println("quit") + fmt.Println("quit") return } } @@ -187,7 +187,7 @@ channel通过操作符`<-`来接收和发送数据 } ## 超时 -有时候会出现goroutine阻塞的情况,那么我们如何避免整个的程序进入阻塞的情况呢?我们可以利用select来设置超时,通过如下的方式实现: +有时候会出现goroutine阻塞的情况,那么我们如何避免整个程序进入阻塞的情况呢?我们可以利用select来设置超时,通过如下的方式实现: func main() { c := make(chan int) @@ -225,11 +225,11 @@ runtime包中有几个处理goroutine的函数: - NumGoroutine - 返回正在执⾏行和排队的任务总数 + 返回正在执行和排队的任务总数 - GOMAXPROCS - 用来设置可以运行的CPU核数 + 用来设置可以并行计算的CPU核数的最大值,并返回之前的值。