Ответ 1
Я уверен, что Каналы являются FIFO. Они также дешевы, поэтому они будут эффективными с точки зрения памяти. Помимо этого, не зная подробностей о том, как вы собираетесь их использовать, мы не можем дать больше советов.
Я хочу найти структуру очереди (контейнер данных), элементы которой должны быть первыми в первом порядке. Для меня важно, чтобы структура была потокобезопасной. Я собираюсь использовать этот контейнер данных как нечто вроде пула задач или пулов.
Я знаю, что буферный канал является потокобезопасным, но мне интересно, работает ли он как FIFO, особенно в параллельной ситуации.
И если можно использовать буферный канал в качестве поточно-безопасной очереди, мне нужно беспокоиться об эффективности?
Я уверен, что Каналы являются FIFO. Они также дешевы, поэтому они будут эффективными с точки зрения памяти. Помимо этого, не зная подробностей о том, как вы собираетесь их использовать, мы не можем дать больше советов.
В Go буферный канал - это просто: потоковая FIFO-очередь с потоком, поэтому то, что вы пытаетесь сделать, совершенно справедливо. Вы не должны иметь проблем с производительностью при таком подходе.
В общем, я бы сказал, что буферизованные каналы не создают хорошую concurrency -безопасную очередь. Создание их выделяет память для всего буфера. Если размер очереди варьируется от очень малого до очень большого во время выполнения, вам нужно выделить для наихудшего сценария и может тратить много памяти.