goroutine
goroutine
是Go运行时环境管理的轻量级线程
go f(x,y,z)
开启一个新的goroutine执行。
f
,x
,y
,z
是在当前goroutine中定义的,但是在新的goroutine中运行f
。
goroutine在相同的地址空间中运行,因此访问共享内存必须同步。sync
提供了这种可能,不过在Go中并不经常用到,因为还有其他办法。
|
|
运行结果,hello
和world
交替运行。
|
|
channel
channel是有类型的管道,可以使用channel操作符<-
对齐发送或者接受值
|
|
和map与slice一样,使用前必须创建
|
|
默认情况下,在另一端准备好之前,发送和接受都会阻塞。这使得goroutine可以在没有明确的锁或竞态变量的情况下进行同步。
|
|
输出结果
|
|
缓冲channel
channel是可以带缓冲的。为make
提供第二个参数作为缓冲长度来初始化一个缓冲channel
|
|
向带缓冲的channel发送数据时,只有在缓冲区慢的时候才会发生阻塞。而当缓冲区为空时接受操作会阻塞。
|
|
输出结果1212