ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 有缓冲channel 带缓存的Channel内部持有一个元素队列。队列的最大容量是在调用make函数创建channel时通过第二个参数指定的。 向缓存Channel的发送操作就是向内部缓存队列的尾部插入元素,接收操作则是从队列的头部删除元素。如果内部缓存队列是满的,那么发送操作将阻塞直到因另一个goroutine执行接收操作而释放了新的队列空间。相反,如果channel是空的,接收操作将阻塞直到有另一个goroutine执行发送操作而向队列插入元素。 ## cap cap()可以获取channel的容量 ## len len()可以获取channel内部队列中有效的元素个数. ## goroutines泄露 和垃圾变量不同,泄漏的goroutines并不会被自动回收,因此确保每个不再需要的goroutine能正常退出是重要的。 也就是说,当goroutine中使用了channel的时候,要保证使用的channel不会在使用完之后发生阻塞情况,这种情况会导致goroutines不能退出.会造成严重的问题. ## 无缓存和有缓存的选择 关于无缓存或带缓存channels之间的选择,或者是带缓存channels的容量大小的选择,都可能影响程序的正确性。无缓存channel更强地保证了每个**发送操作与相应的同步接收操作**;但是对于带缓存channel,这些操作是**解耦**的。