Go 语言 channel 基础
创始人
2024-11-14 07:11:54

        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 语言中流传很广的谚语

相关内容

热门资讯

裸辞做“一人公司”,我后悔了 去年这个时候,一位以色列程序员正在东南亚旅行。他顺手把一个在脑子里转了很久的想法做成了产品,一个让任...
南京建成国内首个Pre-6G试... 4月21日,2026全球6G技术与产业生态大会在南京开幕。全息互动技术展台前,一名远在北京的工作人员...
超梵求职受邀参加“2025抖音... 超梵求职受邀参加“2025抖音巨量引擎成人教育行业生态大会”,探讨分享优质内容传播,服务万千学员。 ...
摩托罗拉Razr 2026(R... IT之家 4 月 22 日消息,摩托罗拉宣布新一代 Razr 折叠手机将于 4 月 29 日在美国发...
库克卸任,特纳斯领航:苹果新纪... 苹果首席执行官蒂姆·库克将卸任,硬件工程主管约翰·特纳斯将接任,苹果公司今天宣布此事。 库克将在夏季...