Go语言中channel的基础知识

栏目: Go · 发布时间: 8年前

channel

goroutine 运行在相同的地址空间,因此访问共享内存必须做好同步。 goroutine 奉行 通过通信来共享内存,而不是共享内存来通信 。

引⽤类型 channel 是 CSP 模式的具体实现,用于多个 goroutine 通讯。其内部实现了同步,确保并发安全。

  channel 类型

和 map 类似, channel 也一个对应 make 创建的底层数据结构的引用。

当我们复制一个 channel 或用于函数参数传递时,我们只是拷贝了一个 channel 引用,因此调用者何被调用者将引用同一个 channel 对象。和其它的引用类型一样, channel 的零值也是 nil 。

定义一个 channel 时,也需要定义发送到 channel 的值的类型。 channel 可以使用内置的 make() 函数来创建:

make ( chan   Type )   // 等价于 make(chan   Type,   0)

make ( chan   Type ,   capacity )

当 capacity = 0 时, channel 是无缓冲阻塞读写的,当 capacity > 0 时, channel 有缓冲、是非阻塞的,直到写满 capacity 个元素才阻塞写入。

channel 通过操作符 <- 来接收和发送数据,发送和接收数据语法:

channel   <-   value         // 发送 value 到 channel

<- channel               // 接收并将其丢弃

x   :=   <- channel          // 从 channel 中接收数据,并赋值给 x

x ,   ok   :=   <- channel      // 功能同上,同时检查通道是否已关闭或者是否为空

默认情况下, channel 接收和发送数据都是阻塞的,除非另一端已经准备好,这样就使得 goroutine 同步变的更加的简单,而不需要显式的 lock 。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

疯狂的独角兽

疯狂的独角兽

丹·莱昂斯 / 王天任 / 海南出版社 / 2017-10 / 42

★商业与文学的有机结合,真实与虚幻间嬉笑怒骂,幽默风趣、引人入胜、发人深省的商业小说。 ★《纽约时报》《华尔街日报》《旧金山纪事报》Amazon畅销书,《财富》《纽约邮报》《新闻周刊》《华盛顿邮报》、畅销书《硅谷钢铁侠》作者阿什利·万斯、畅销书《一网打尽》作者布拉德·斯通联袂推荐。 ★作者丹·莱昂斯集小说家、记者、编剧为一身——HBO经典热门剧、豆瓣高分美剧《硅谷》作者;畅销书《乔布斯......一起来看看 《疯狂的独角兽》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具