Сколько 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. В чем причина этого?
1 ответ:
На самом деле, управление памятью занимает более одной горутины ...
4 начальные горотины:
- Главная горутина
- подметальщик фона (фаза сборки мусора, которая является параллельной)
- мусорщик (также часть сборщика мусора)
- финализатор goroutine (исключительно запускающий финализаторы , в конечном счете присоединенные к объектам)
Значит, время.Вызывается функция сна. Для этого требуется таймер. Таймеры реализуются во время выполнения, через дополнительный goroutine (timerproc), который обрабатывает события, хранящиеся в куче таймера. Эта горутина лениво запускается, когда первый таймер добавляется в кучу.
Таким образом, Вы, наконец, получите 5 горотинов.
Comments