采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
我想直接用chan来实现一个队列,带push和pop功能
一个不带buffer的channel一次只能传递一个数据,当然从发送方和接收方来看,的确是“先进先出”的行为,只不过会阻塞。
带buffer的channel(我在channle那章有说到)是真的先进先出,而且下面的buffer满之前不会阻塞。
那么最后,其实我们还是不要用chan来当队列用,原因就是会阻塞,即使有buffer也只是减缓了阻塞的发生。可以参考一下我的实战代码,https://git.imooc.com/coding-180/coding-180/src/master/crawler/scheduler/queued.go#L23
及时的从chan收数据,减小阻塞,随后放到由slice来实现的队列里。
已经预定义了一个有buffer的chan,向chan中发送数据,然后再次给这个chan来make更大的空间,之前chan中的数据会全部丢失对吗? 有什么办吧能在不丢失之前数据的前提下扩展chan的buffer大小? 如果能保证带buffer的chan不被装满阻塞,就完全可以用chan来当队列吗?
登录后可查看更多问答,登录/注册
语法+分布式爬虫实战 为转型工程师量身打造
3.7k 14
690 1
2.0k 1
1.1k 12