← Назад ко всем вопросам

На уровне чего создается горутина

1️⃣ Как кратко ответить

Горутина создается на уровне операционной системы, но управляется средой выполнения Go (Go runtime), которая обеспечивает легковесное переключение контекста и планирование выполнения.

2️⃣ Подробное объяснение темы

Горутины — это легковесные потоки выполнения, которые управляются средой выполнения Go. Они позволяют выполнять функции параллельно, что делает их мощным инструментом для создания конкурентных программ. В отличие от традиционных потоков, горутины имеют меньший накладной расход и более эффективны в плане использования ресурсов.

Как работают горутины

Когда вы создаете горутину, вы фактически запускаете функцию в отдельном потоке выполнения. Однако, в отличие от потоков операционной системы, горутины управляются Go runtime, что позволяет им быть более легковесными и эффективными.

Пример кода

package main
​
import (
    "fmt"
    "time"
)
​
func printNumbers() {
    for i := 1; i <= 5; i++ {
        fmt.Println(i)
        time.Sleep(100 * time.Millisecond) // Пауза для имитации длительной операции
    }
}
​
func main() {
    go printNumbers() // Запуск функции printNumbers в отдельной горутине
​
    fmt.Println("Main function")
    time.Sleep(600 * time.Millisecond) // Пауза, чтобы дать время горутине завершиться
}

Объяснение кода

  • package main: Определяет пакет, в котором находится программа. main — это основной пакет, с которого начинается выполнение программы.

  • import: Импортирует пакеты fmt и time, которые используются для вывода на экран и работы с временем соответственно.

  • func printNumbers(): Определяет функцию printNumbers, которая выводит числа от 1 до 5 с задержкой в 100 миллисекунд между выводами. Это имитирует длительную операцию.

  • go printNumbers(): Запускает функцию printNumbers в отдельной горутине. Ключевое слово go перед вызовом функции указывает на создание новой горутины.

  • fmt.Println("Main function"): Выводит строку "Main function" в основной функции main.

  • time.Sleep(600 * time.Millisecond): Задержка в 600 миллисекунд, чтобы основная функция main не завершилась до того, как горутина printNumbers выполнит свою работу.

Зачем нужны горутины

Горутины позволяют эффективно использовать многопоточность, не перегружая систему. Они полезны в ситуациях, когда нужно выполнять множество задач одновременно, например, обрабатывать сетевые запросы, выполнять операции ввода-вывода или обрабатывать данные в фоновом режиме. Благодаря легковесности и управлению Go runtime, горутины могут быть созданы в большом количестве без значительного влияния на производительность системы.

Тема: Конкурентность
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки