@nano_e_t_4

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

Читал доку, читал хабра, потом еще раз перечитал и все же непонял:
package main
import (
"fmt"
"os"
)

func writeToFile() {
    file, err := os.Create("result.txt")
    if err != nil {
        fmt.Println("Cannot create file")
    }
    defer file.Close()

    fmt.Fprintf(file, "Hello Readers of golangcode.com")
}

func main() {
    go writeToFile()
    for {}
}

ведь по идее должен получится файл result.txt с соответствующей записью. но его нет (

причем если я меняю бесконечный цикл на time.wait, то файл появляется
вроде как в любом случае должно передаваться управление вновь возникшей горутине
объясните пожалуйста, почему оно так получается?
  • Вопрос задан
  • 1225 просмотров
Решения вопроса 1
В Го есть такая системная переменная как $GOMAXPROCS, по-умолчанию она равна количеству процессорных ядер. Её значение определяет, сколько процессов будет запущено планировщиком го. Горутины распределяются между этими процессами. Если одна горутина заняла все вычислительное время одного процесса (как в вашем случае бесконечный цикл for, ибо он не прерывается операциями ввода/вывода или другими случаями ожидания ресурсов), то если $GOMAXPROCS=1, другие горутины будут ждать освобождения единственного процесса.
Когда вы меняете цикл на таймер, в момент вызова time.Wait процесс освобождается и может выполнить другую горутину.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы