Назад к вопросам
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 пакет Мьютексы, семафоры ОС