go faq menjawab soalan "Kenapa tiada id goroutine?"
goroutines do not have names; they are just anonymous workers. they expose no unique identifier, name, or data structure to the programmer. https://go.dev/doc/faq#no_goroutine_id
Saya tidak percaya penjelasan "mereka tidak mendedahkan pengecam unik" kerana nampaknya kita boleh mendapatkan id goroutine dengan menggunakan runtime.stack().
Soalan
Apakah perbezaan antara "pengecam unik" dalam jawapan go faq dan id goroutine yang diekstrak oleh runtime.stack?
Mengapa go faq menjawab "Mereka tidak mendedahkan pengecam unik"?
Saya ingin memahami dengan jelas "mengapa tiada id goroutine?"
runtime.stack() nampaknya menyediakan id goroutine. https://go.dev/play/p/5b6fd7c8s6-
package main import ( "bytes" "errors" "fmt" "runtime" "strconv" ) func main() { fmt.Println(goid()) done := make(chan struct{}) go func() { fmt.Println(goid()) done <- struct{}{} }() go func() { fmt.Println(goid()) done <- struct{}{} }() <-done <-done close(done) } var ( goroutinePrefix = []byte("goroutine ") errBadStack = errors.New("invalid runtime.Stack output") ) func goid() (int, error) { buf := make([]byte, 32) n := runtime.Stack(buf, false) buf = buf[:n] // goroutine 1 [running]: ... buf, ok := bytes.CutPrefix(buf, goroutinePrefix) if !ok { return 0, errBadStack } i := bytes.IndexByte(buf, ' ') if i < 0 { return 0, errBadStack } return strconv.Atoi(string(buf[:i])) }
Selain itu, terdapat cara lain untuk mendapatkan id goroutine melalui ebpf.
Bagaimana untuk mendapatkan id goroutine menggunakan ebpf
Apakah perbezaan antara "pengecam unik" dalam Soalan Lazim Go dan id goroutine yang diekstrak mengikut masa jalan.Timbunan?
Soalan Lazim menyatakan bahawa goroutine tidak mendedahkan pengecam unik, nama atau struktur data kepada pengaturcara.
Waktu jalan memerlukan cara untuk mengenal pasti Goroutine, tetapi tiada cara yang disokong untuk mendapatkan pengecam itu.
Dokumentasi Go tidak menyatakan format surih tindanan yang dikembalikan mengikut masa jalan.Timbunan atau maksud nombor goroutine. Kod dalam soalan mungkin mendapatkan id unik sekarang, tetapi tiada jaminan bahawa kod itu akan berbuat demikian pada masa hadapan.
Atas ialah kandungan terperinci Pergi FAQ mengatakan 'Tiada ID goroutine' tetapi kita boleh mendapatkannya daripada runtime.Stack. apa itu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!