我想找到一个队列结构(一个数据容器),它的元素必须是先进先出的。对我来说,结构必须是线程安全的很重要。我打算将此数据容器用作任务或连接池之类的东西。
我知道缓冲通道是线程安全的,但我想知道它是否可以用作 FIFO,尤其是在并发情况下。
如果可以将缓冲通道用作线程安全队列,我是否需要担心它的效率?
在 Go 中,缓冲通道就是这样:一个线程安全的 FIFO 队列,因此您尝试做的事情是完全有效的。使用这种方法,您根本不应该遇到性能问题。
我很确定通道是先进先出的。它们也很便宜,因此内存效率很高。除此之外,在不知道您将如何使用它们的细节的情况下,我们真的无法提供更多建议。
一般来说,我会说缓冲通道不会成为一个好的并发安全队列。创建它们会为整个缓冲区分配内存。如果您的队列大小在执行过程中从非常小变为非常大,则您必须为最坏的情况分配内存,并且可能会浪费大量内存。