参考:
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{})
网友评论