chan是严格的先进先出吗?我可以借助chan实现队列吗?
来源:19-2 课程总结

脑子笨学不会
2019-04-06
我想直接用chan来实现一个队列,带push和pop功能
写回答
1回答
-
一个不带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来实现的队列里。
012019-04-07
相似问题