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