微小改动
This commit is contained in:
@@ -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核数的最大值,并返回之前的值。
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user