Go 语言 channel 基础

        channel 是 Go 语言内建的 first-class 类型,也是 Go 语言与众不同的特性之一。何为 first-class ? 你可以这样理解,channel 类型和 int、struct、func 等一样,是 Go 的基础类型。Go 语言的 channel 设计精巧、简单,以至于有人用其他语言编写了类似于 Go 风格的 channel 库,比如 docker/libchan、tylertreat/chan,但是并不像 Go 语言一样把 channel 内置到语言规范中。

1. channel 的历史

        如果想了解 channel 这种 Go 语言中特有的数据结构,则要追溯到 CSP 模型,了解它的历史,以及它对 Go 的创始人设计 channel 类型的影响。

        CSP 是 Communicating Sequential Process 的简称,中文直译为 “通信顺序进程” ,或者叫作交换信息的循序进程,是用来描述并发系统中交互的一种模式。

        CSP 最早出现于计算机科学家 Tony Hoare 在 1978 年发表的论文中。最初,论文中提出的 CSP 版本在本质上不是一种进程演算,而是一种并发编程语言,但之后经过一系列的改进,最终发展并精炼出 CSP 理论。CSP 允许使用进程组件来描述系统,它们独立运行,并且只通过消息传递的方式通信。

        就像 Go 的创始人之一 Rob Pike 所说的,“每一个计算机程序员都应该读一读 Tony Hoare 在 1978 年发表的关于 CSP 的论文。” 他和 Ken Thompson 在设计 Go 语言时也深受此论文的影响,并将 CSP 理论真正应用于语言本身,通过引入 channel 这个新的类型来实现 CSP 的思路。

        channel 是 GO 语言内置的类型,你无须引入某个包,就能使用它。虽然 GO 也提供了传统的同步原语,但它们都是通过库的方式提供的,你必须要引入 sync 包或者 atomic 包才能使用它们。

        channel 和 Go 的另一个独特的特性 goroutine 一起为并发编程提供了优雅的、便利的、与传统并发控制不同的方案,并演化出很多并发模式。

2. channel 的应用场景

先来看一条 Go 语言中流传很广的谚语

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mindfulness code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值