Channel
无缓冲channel
无缓冲channel兼具通信和同步特性,在并发程序中应用颇为广泛。
可以通过不带有capacity参数的内置make函数创建一个可用的无缓冲channel:
由于无缓冲channel的运行时层实现不带有缓冲区,因此对无缓冲channel的接收和发送操作是同步的。
一个无缓冲的channel动作发生和完成的时序如下:
这与Go官方“Go内存模型”一文中对channel通信的描述是一致的。正因如此,下面的代码可以保证main输出的变量a的值为”hello, world“:
因为函数f中的channel接收动作发生在主goroutine对channel发送动作完成之前,而a = “hello, world“语句又发生在channel接收动作之前,因此主goroutine在channel发送操作完成后看到的变量a的值一定是”hello, world”,而不是空字符串。
用作信号传递
用于替代锁机制
缓冲channel
用作消息队列
用作计数信号量 counting semaphore
len(channel)的应用
nil channel的妙用
与select结合
避免阻塞
实现超时机制
实现心跳机制
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。