Что такое Work-Stealing

«Что такое Work-Stealing» — вопрос из категории Golang, который задают на 26% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Work-Stealing — это алгоритм балансировки нагрузки между потоками (горутинами) в многопоточных системах. В Go он используется в планировщике (scheduler) для эффективного распределения задач.

Как работает:

  1. Каждый поток (P в Go) имеет свою локальную очередь задач (горутин)
  2. Если у потока закончились задачи, он "ворует" половину задач из очереди другого случайного потока
  3. Если все очереди пусты, поток блокируется или ищет работу глобально

Пример на Go:

func main() {
    // Горутины будут распределены между потоками
    for i := 0; i < 100; i++ {
        go func(num int) {
            fmt.Println(num)
        }(i)
    }
    time.Sleep(time.Second)
}

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

  • Минимизация блокировок (основная работа с локальной очередью)
  • Автоматическая балансировка нагрузки
  • Эффективность для short-lived задач