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