【发布时间】:2011-03-08 23:31:42
【问题描述】:
所以,现在,我只需传递一个指向 Queue 对象的指针(实现并不重要)并在应该向队列中添加内容的 goroutine 的末尾调用 queue.add(result)。
我需要同样的功能——当然,与简单的队列添加函数调用相比,使用逗号 ok 语法进行循环检查完成在性能方面是不可接受的。
有没有更好的方法?
【问题讨论】:
-
您到底想完成什么?据我所知,您不需要队列对象,只需要一个通道。然后在每个 goroutine 结束时执行 channel
-
好吧,我有频道生成一个需要一些时间来创建的对象;一直在生成其中的几个对象(通过循环)。创建对象后,我需要将其放入队列中,以便程序的另一部分可以在单独的 goroutine 中不断地处理这些已完成的 goroutine。我知道
channel <- result正在阻塞——这不是我真正想要的。 -
通道可以被缓冲,make(chan rtype, BUFFER_SIZE),在这种情况下发送不会阻塞,除非缓冲区已满。如果你真的需要一个无限缓冲的队列,有一个带有小缓冲区的结果通道和另一个从通道读取并将结果存储在容器/向量中的 goroutine。Vector