From 9007a2e1601363c3a52fd71dc3c3a6040d0b725f Mon Sep 17 00:00:00 2001 From: vCaesar Date: Fri, 23 Dec 2016 03:01:35 +0800 Subject: [PATCH] [Fix 02.7.md runtime](issues/761) --- zh/02.7.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/zh/02.7.md b/zh/02.7.md index f6146e92..f65caca3 100644 --- a/zh/02.7.md +++ b/zh/02.7.md @@ -49,7 +49,9 @@ goroutine是通过Go的runtime管理的一个线程管理器。goroutine通过`g > runtime.Gosched()表示让CPU把时间片让给别人,下次某个时候继续恢复执行该goroutine。 ->默认情况下,调度器仅使用单线程,也就是说只实现了并发。想要发挥多核处理器的并行,需要在我们的程序中显式调用 runtime.GOMAXPROCS(n) 告诉调度器同时使用多个线程。GOMAXPROCS 设置了同时运行逻辑代码的系统线程的最大数量,并返回之前的设置。如果n < 1,不会改变当前设置。以后Go的新版本中调度得到改进后,这将被移除。这里有一篇Rob介绍的关于并发和并行的文章:http://concur.rspace.googlecode.com/hg/talk/concur.html#landing-slide +>默认情况下,在Go 1.5将标识并发系统线程个数的runtime.GOMAXPROCS的初始值由1改为了运行环境的CPU核数。 + +但在Go 1.5以前调度器仅使用单线程,也就是说只实现了并发。想要发挥多核处理器的并行,需要在我们的程序中显式调用 runtime.GOMAXPROCS(n) 告诉调度器同时使用多个线程。GOMAXPROCS 设置了同时运行逻辑代码的系统线程的最大数量,并返回之前的设置。如果n < 1,不会改变当前设置。以后Go的新版本中调度得到改进后,这将被移除。这里有一篇Rob介绍的关于并发和并行的文章:http://concur.rspace.googlecode.com/hg/talk/concur.html#landing-slide ## channels goroutine运行在相同的地址空间,因此访问共享内存必须做好同步。那么goroutine之间如何进行数据的通信呢,Go提供了一个很好的通信机制channel。channel可以与Unix shell 中的双向管道做类比:可以通过它发送或者接收值。这些值只能是特定的类型:channel类型。定义一个channel时,也需要定义发送到channel的值的类型。注意,必须使用make 创建channel: