Что такое локальная очередь

«Что такое локальная очередь» — вопрос из категории Брокеры сообщений, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Локальная очередь (local queue) в Go — это очередь, которая существует в пределах одной горутины и используется для обработки задач без конкуренции. Она часто применяется для оптимизации, чтобы избежать накладных расходов на синхронизацию.

Пример с буферизованным каналом как локальной очередью:

func worker(tasks chan int) {
    localQueue := make([]int, 0, 10) // Локальная очередь
    for {
        // Сначала проверяем локальную очередь
        if len(localQueue) > 0 {
            task := localQueue[0]
            localQueue = localQueue[1:]
            process(task)
            continue
        }

        // Если локальная очередь пуста, берем из общего канала
        select {
        case task := <-tasks:
            localQueue = append(localQueue, task) // Добавляем в локальную очередь
        default:
            return
        }
    }
}

Преимущества:

  • Уменьшает contention (борьбу за ресурсы)
  • Улучшает локальность данных (cache-friendly)
  • Снижает нагрузку на глобальные примитивы синхронизации