知识卡片

channel通过阻塞实现同步

专业/工作 · 1375.a.1

内容

channel 除了在 goroutine 之间传值,还顺带解决了[[main退出则程序退出不等其他goroutine]]留下 的等待问题:往一个 channel 发送值的操作会一直阻塞,直到另一个 goroutine 在同一个 channel 上 执行了接收;反过来,接收操作也会一直阻塞发散:这 正是”不要通过共享内存来通信,而要通过通信来共享内存”这条并发设计思路的直接体现——不是靠锁 去保护一块大家都能碰的。

参考来源

- 位置:《Head First Go语言程序设计》第13章《分享工作:goroutine和channel》(源文件:_epub-src/index_split_002.html) - 结论依据:原文围绕“channel除了在goroutine之间传值,还顺带解决了[[main退出则程序退出不等其他goroutine]]留下…”展开机制、顺序或组件关系说明;摘录中的关键步骤和术语支撑本卡片正文及结构图。 - 原始内容:= nil { log.Fatal(err) } } } 代码示例及其输出如下所示,但是我们在输出中留下了一些空白。 看看你能不能把它们填上。 13 分享工作:goroutine和channel 一次只做一件事并不总是完成任务最快的方法。一些大问题可以分 解成小任务。goroutine可以让程序同时处理几个不同的任务。goroutine 可以使用channe…