Ответ
Многопоточность — это способ выполнения нескольких потоков (threads) внутри одного процесса параллельно или псевдопараллельно. Потоки разделяют общую память процесса, что упрощает обмен данными, но требует синхронизации для избежания гонок (race conditions).
В Go вместо классических потоков используются горутины (goroutines) — легковесные потоки, управляемые рантаймом. Они экономят ресурсы и масштабируются лучше системных потоков.
Пример:
package main
import (
"fmt"
"time"
)
func printNumbers() {
for i := 1; i <= 5; i++ {
time.Sleep(100 * time.Millisecond)
fmt.Println(i)
}
}
func main() {
go printNumbers() // запуск горутины
go printNumbers() // ещё одна горутина
time.Sleep(1 * time.Second) // ожидание завершения
}
Ключевые отличия горутин от потоков:
- Запуск тысяч горутин без значительных накладных расходов
- Кооперативная многозадачность (не вытесняющая)
- Каналы (channels) для безопасной коммуникации
Видео-ответы
▶
▶