goroutine简介 goroutine是go语言中最为NB的设计,也是其魅力所在,goroutine的本质是协程,是实现并行计算的核心。goroutine使用方式非常的简单,只需使用go关键字即可启动一个协程,并且它是处于异步方式运行,你不需要等它运行完成以后在执行以后的代码。

1、 主线程是一个物理线程,直接作用在 cpu 上的。是重量级的,非常耗费 cpu 资源。

2、 协程从主线程开启的,是轻量级的线程,是逻辑态。对资源消耗相对小。

3、 Golang 的协程机制是重要的特点,可以轻松的开启上万个协程。其它编程语言的并发机制是一般基于线程的,开启过多的线程,资源耗费大,这里就突显 Golang 在并发上的优

4、goroutine通过go关键字实现了,其实就是一个普通的函数。

为了充分了利用多 cpu 的优势,在 Golang 程序中,设置运行的 cpu 数目(Go1.8以后默认运行在多核上)

  

2、执行流程图

3、简单例子

  

4、使用全局变量加锁的例子

计算0-10的乘阶

代码:

  

二、channel

channel 的基本介绍

1、channle 本质就是一个数据结构-队列

2、数据是先进先出

3、线程安全,多 goroutine 访问时,不需要加锁,就是说 channel 本身就是线程安全的

4、channel 有类型的,一个 string 的 channel 只能存放 string 类型数

示意图:

文档参考:

http://www.cnblogs.com/wdliu/p/9272220.html

channel 使用的注意事项

1、channel 中只能存放指定的数据类型

2、channle 的数据放满后,就不能再放入了

3、如果从 channel 取出数据后,可以继续放入

4、在没有使用协程的情况下,如果 channel 数据取完了,再取,就会报 dead lock