Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: go, workerpool, goroutine

Как реализовать worker pool с ограничением по concurrency в Go?

Вопрос проверяет практические навыки конкурентного программирования и умение управлять нагрузкой.

Короткий ответ

Worker pool — это набор фиксированных воркеров, которые получают задачи из канала и обрабатывают их параллельно. Ограничение по concurrency достигается размером пула.

Длинный ответ

Worker pool решает проблему управления количеством одновременно выполняемых задач. Вместо запуска тысячи горутин создаётся фиксированное число воркеров, которые берут задачи из канала.

func worker(id int, jobs <-chan int, results chan<- int) {
		for j := range jobs {
				results <- j * 2 // обработка
		}
}

func main() {
		jobs := make(chan int, 10)
		results := make(chan int, 10)

		for w := 1; w <= 3; w++ {
				go worker(w, jobs, results)
		}

		for j := 1; j <= 5; j++ {
				jobs <- j
		}
		close(jobs)

		for r := 1; r <= 5; r++ {
				fmt.Println(<-results)
		}
}

Особенности:

  • Количество воркеров регулирует параллелизм.

  • Для graceful shutdown можно использовать context.Context.

  • При высоких нагрузках можно масштабировать размер пула динамически.

Вывод: Worker pool — базовый паттерн конкурентности в Go для ограниченного числа ресурсов.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • Golang

    Golang

Ключевые слова

#go

#workerpool

#goroutine

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.