Сколько goroutines запускаются по умолчанию в программе Go?



package main

import (
//"time"
"runtime"
"fmt"
)

func main() {
//time.Sleep(100 * time.Millisecond)//By adding this number of goroutine increases
fmt.Println(runtime.NumGoroutine())
}


Я пытаюсь выяснить количество горотинов в программе. Мой код находится здесь . При кодировании этого я заметил, что по умолчанию число goroutines равно 4.



Для меня:




  • main-это один горутин

  • сборщик мусора-это один горотин


Каковы остальные?



, добавив время .Сон (выше), число горотинов увеличивается до 5. В чем причина этого?

613   1  

1 ответ:

На самом деле, управление памятью занимает более одной горутины ...

4 начальные горотины:

  • Главная горутина
  • подметальщик фона (фаза сборки мусора, которая является параллельной)
  • мусорщик (также часть сборщика мусора)
  • финализатор goroutine (исключительно запускающий финализаторы , в конечном счете присоединенные к объектам)

Значит, время.Вызывается функция сна. Для этого требуется таймер. Таймеры реализуются во время выполнения, через дополнительный goroutine (timerproc), который обрабатывает события, хранящиеся в куче таймера. Эта горутина лениво запускается, когда первый таймер добавляется в кучу.

Таким образом, Вы, наконец, получите 5 горотинов.

Comments

    Ничего не найдено.