是否可以将Go的缓冲通道用作线程安全队列?

时间:2012-05-03 02:04:42

标签: queue go channel

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

我知道缓冲通道是线程安全的,但我不知道它是否作为FIFO工作,特别是在并发情况下。

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

3 个答案:

答案 0 :(得分:11)

在Go中,缓冲通道就是:线程安全的FIFO队列,所以你要做的就是完全有效。使用这种方法,你不应该遇到性能问题。

答案 1 :(得分:2)

我很确定频道是FIFO。它们也很便宜,因此它们可以提高内存效率。除此之外不知道如何使用它们的细节我们无法提供更多建议。

答案 2 :(得分:0)

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