2014-09-09 6 views

Antwort

8

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 
Verwandte Themen