Назад к вопросам
Junior
132
questionbank
Что такое горутины?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Легковесные потоки выполнения, управляемые средой выполнения Go. Они создаются ключевым словом go перед вызовом функции.
Основные характеристики:
- Меньший расход памяти: Горутина начинается с малым размером стека (обычно 2 КБ), который может динамически увеличиваться или уменьшаться.
- Более быстрое создание: Создание горутины намного быстрее, чем создание системного потока.
- Мультиплексирование на системные потоки: Множество горутин могут быть мультиплексированы на меньшее количество системных потоков runtime планировщиком Go.
- Кооперативное планирование: Горутины не вытесняются принудительно; они добровольно уступают управление планировщику (например, при блокирующих вызовах или явных вызовах
runtime.Gosched()).
Пример создания:
package main
import (
"fmt"
"time"
)
func sayHello() {
fmt.Println("Привет из горутины!")
}
func main() {
go sayHello() // Запускаем sayHello как горутину
fmt.Println("Привет из основной функции!")
time.Sleep(1 * time.Second) // Чтобы основная функция не завершилась раньше горутины
}
Сравнение с потоками:
| Признак | Горутины Go | Потоки ОС |
|---|---|---|
| Управление | Среда выполнения Go | Операционная система |
| Расход памяти | Низкий, динамический стек | Высокий, фиксированный стек |
| Создание | Быстрое | Медленное |
| Планирование | Кооперативное | Вытесняющее |
| Синхронизация | Каналы, sync пакет | Мьютексы, семафоры ОС |