Вопрос проверяет понимание механизмов конкурентности в Go и различий между горутинами и потоками ОС.
Горутина — это легковесный поток выполнения в Go, управляемый рантаймом языка. Поток ОС — это единица выполнения, управляемая операционной системой. Основное различие заключается в том, как они создаются и переключаются.
package main
import (
"fmt"
"runtime"
"sync"
)
func main() {
var wg sync.WaitGroup
for i := 0; i < 1000; i++ {
wg.Add(1)
go func(id int) {
defer wg.Done()
fmt.Println("Горутина", id)
runtime.Gosched() // добровольная передача управления
}(i)
}
wg.Wait()
}В этом примере создается 1000 горутин. Планировщик Go эффективно распределяет их выполнение на доступных потоках ОС, переключаясь между ними без дорогих системных вызовов.
Горутины обеспечивают высокую производительность при работе с большим количеством конкурентных задач благодаря легковесности и эффективному планированию в пользовательском пространстве. Это делает Go идеальным для серверных приложений, микросервисов и систем, требующих высокой степени параллелизма.