22

我想找到一个队列结构(一个数据容器),它的元素必须是先进先出的。对我来说,结构必须是线程安全的很重要。我打算将此数据容器用作任务或连接池之类的东西。

我知道缓冲通道是线程安全的,但我想知道它是否可以用作 FIFO,尤其是在并发情况下。

如果可以将缓冲通道用作线程安全队列,我是否需要担心它的效率?

4

3 回答 3

17

在 Go 中,缓冲通道就是这样:一个线程安全的 FIFO 队列,因此您尝试做的事情是完全有效的。使用这种方法,您根本不应该遇到性能问题。

于 2012-05-03T08:14:15.193 回答
5

我很确定通道是先进先出的。它们也很便宜,因此内存效率很高。除此之外,在不知道您将如何使用它们的细节的情况下,我们真的无法提供更多建议。

于 2012-05-03T04:03:49.860 回答
1

一般来说,我会说缓冲通道不会成为一个好的并发安全队列。创建它们会为整个缓冲区分配内存。如果您的队列大小在执行过程中从非常小变为非常大,则您必须为最坏的情况分配内存,并且可能会浪费大量内存。

于 2016-10-28T23:03:48.590 回答