Das sind keine Fäden, sie sind goroutines, und die Anzahl kann auf aktuelle Implementierung basierend variieren (das heißt in go1.2 es 2 gedruckt haben würde).
Momentan sieht es so aus, als ob Sie 1 für main
und 3 für Laufzeit/gc haben.
import "fmt"
func main() {
fmt.Println(func() string { panic(nil); return "" }())
}
Dies zeigt
goroutine 16 [running]:
runtime.panic(0x0, 0x0)
/usr/local/go/src/pkg/runtime/panic.c:279 +0xf5
main.func·001(0x3ea4f, 0xdc4b0)
/test/threads.go:6 +0x28
main.main()
/test/threads.go:6 +0x1e
goroutine 17 [runnable]:
runtime.MHeap_Scavenger()
/usr/local/go/src/pkg/runtime/mheap.c:507
runtime.goexit()
/usr/local/go/src/pkg/runtime/proc.c:1445
goroutine 18 [runnable]:
bgsweep()
/usr/local/go/src/pkg/runtime/mgc0.c:1976
runtime.goexit()
/usr/local/go/src/pkg/runtime/proc.c:1445
goroutine 19 [runnable]:
runfinq()
/usr/local/go/src/pkg/runtime/mgc0.c:2606
runtime.goexit()
/usr/local/go/src/pkg/runtime/proc.c:1445
wenn Sie fmt entfernen, und verwenden Sie die Bootstrapping print
Funktion nur 2 goroutines erhalten.
import "runtime"
func main() {
print(runtime.NumGoroutine(), "\n")
}
// prints 2
Wenn Sie jemals genau wissen wollen, was goroutines laufen, einen Stack-Trace drucken, Panik nennen, oder den Prozess mit SIGQUIT (die einen Stack-Trace und Ausfahrten druckt) töten. Wenn Sie das absolute Minimum-Programm ausführen können Sie eine Stack-Trace erhalten von Ihnen die 2 goroutines sehen:
package main
func main() {
panic(nil)
}
Goroutines sind sehr preiswert, und viele Dinge beginnen und mehr goroutines zu stoppen, so versuchen, sie zu verfolgen Untergrenze ist nicht sehr nützlich. Beachten Sie, dass, obwohl es nur zwei goroutines gibt (main/runtime.panic und runtime.MHeap_Scavenger), der Zählerstand bereits bis zu 17 beträgt.
panic: nil
goroutine 16 [running]:
runtime.panic(0x0, 0x0)
/usr/local/go/src/pkg/runtime/panic.c:279 +0xf5
main.main()
/test/threads.go:4 +0x28
goroutine 17 [runnable]:
runtime.MHeap_Scavenger()
/usr/local/go/src/pkg/runtime/mheap.c:507
runtime.goexit()
/usr/local/go/src/pkg/runtime/proc.c:1445
exit status 2