Ответ
Work-Stealing — это алгоритм балансировки нагрузки между потоками (горутинами) в многопоточных системах. В Go он используется в планировщике (scheduler) для эффективного распределения задач.
Как работает:
- Каждый поток (P в Go) имеет свою локальную очередь задач (горутин)
- Если у потока закончились задачи, он "ворует" половину задач из очереди другого случайного потока
- Если все очереди пусты, поток блокируется или ищет работу глобально
Пример на Go:
func main() {
// Горутины будут распределены между потоками
for i := 0; i < 100; i++ {
go func(num int) {
fmt.Println(num)
}(i)
}
time.Sleep(time.Second)
}
Преимущества:
- Минимизация блокировок (основная работа с локальной очередью)
- Автоматическая балансировка нагрузки
- Эффективность для short-lived задач