这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天
channel
Go语言中的通道(channel)是一种特殊的类型。 在任何时候,同时只能有一个 goroutine 访问通道进行发送和获取数据。goroutine 间通过通道就可以通信。 通道像一个传送带或者队列,总是遵循先入先出(First In First Out)的规则,保证收发数据的顺序。 (1)channel本身是一个队列,先进先出 (2)线程安全,不需要加锁 (3)本身是有类型的,string, int 等,如果要存多种类型,则定义成 interface类型 (4)channel是引用类型,必须make之后才能使用,一旦 make,它的容量就确定了,不会动态增加!!它和map,slice不一样 特点: (1)一旦初始化容量,就不会改变了。 (2)当写满时,不可以写,取空时,不可以取。(3)发送将持续阻塞直到数据被接收 把数据往通道中发送时,如果接收方一直都没有接收,那么发送操作将持续阻塞。Go 程序运行时能智能地发现一些永远无法发送成功的语句并做出提示 (4)接收将持续阻塞直到发送方发送数据。 如果接收方接收时,通道中没有发送方发送数据,接收方也会发生阻塞,直到发送方发送数据为止。(5)每次接收一个元素。 通道一次只能接收一个数据元素。 channel用于携程中的通信 go中的channel是一个队列,遵循先进先出的原则,负责携程之间的通信(go提倡不要通过共享内存来通信,而是要通过通信来实现内存共享),CSP并发模型就是通过goroutine和channel来实现的. 如果说goroutine是Go程序并发的执行体,channel就是它们之间的连接。channel是可以让一个goroutine发送特定值到另一个goroutine的通信机制。