[Fix 02.7.md runtime](issues/761)

This commit is contained in:
vCaesar
2016-12-23 03:01:35 +08:00
parent c659a20fe5
commit 9007a2e160

View File

@@ -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