Go语言并发简述

参考:
http://c.biancheng.net/view/4356.html

关键点

通过关键词汇,实现快速理解,记忆目的

1、Go语言的并发特性是从语言层面支持的 ?
Go 语言直接通过语言级的关键词go 就可以实现并发,这样的话,相比于其他操作系统层面的线程更加轻量

2、Go语言的goroutine线程有什么不同
A、goroutine是由Go语言的运行时runtime调度完成的,线程是由操作系统层面调度完成的

1、Goroutine介绍

Go语言层面实现了Goroutine之间的内存共享。

1.1、如何创建Goroutine呢?

  • 使用Go语言层面的关键字go

  • 将go放到函数前面,即可
    这样的话,该函数在执行的时候,会作为一个独立的并发线程,此种线程在Go语言中被称为goroutine

1.2、如何用goroutine呢或者说,使用goroutine的常见的几种写法

//go 关键字放在方法调用前新建一个 goroutine 并执行方法体
go GetThingDone(param1, param2);

//新建一个匿名方法并执行
go func(param1, param2) {
}(val1, val2)

//直接新建一个 goroutine 并在 goroutine 中执行代码块
go {
    //do someting...
}

因为 goroutine 在多核 cpu 环境下是并行的,如果代码块在多个 goroutine 中执行,那么我们就实现了代码的并行。

注意
上面提到的 go 直接 添加 代码块方式 是不允许的。

go 代码块 协程方式

2、channel介绍

2.1、channel特性

  • channel 是Go语言在语言级别提供的 goroutine 间的通信方式。

  • 可以使用 channel 多个 goroutine 之间传递消息。

  • channel是进程内的通信方式,而不是进程间的通信方式

  • channel是跟类型相关的,也就是说,一个channel只能传递一种类型的值。

2.2、如何创建一个channel呢?

注意点:
必须使用make来创建

ci := make(chan int)
cs := make(chan string)
cf := make(chan interface{})

你可能感兴趣的:(Go语言并发简述)