Mengapa tumpukan goroutine tidak terbatas?

Dari waktu ke waktu, pendatang baru di Go menemukan properti bahasa menarik yang terkait dengan ukuran tumpukan yang tersedia untuk goroutine. Ini biasanya terjadi karena programmer secara tidak sengaja membuat rekursi tak terbatas. Untuk mengilustrasikan hal ini, perhatikan contoh berikut (sedikit dibuat-buat).







package main

import "fmt"

type S struct {
        a, b int
}

// String implements the fmt.Stringer interface
func (s *S) String() string {
        return fmt.Sprintf("%s", s) // Sprintf will call s.String()
}

func main() {
        s := &S{a: 1, b: 2}
        fmt.Println(s)
}
      
      





, , , , , , ^C , . , , , .







, , , . , , Go?







โ€” ; ( 1โ€“8 POSIX), . 4096 ( Go 2048 โ€” . ), - .







, (5l, 6l, 8l) "" [1], , . , , , runtime morestack, [2], (caller), , . , , , .







Go , , , .







, , , Go , .







, , . , .







, Go, , , , , , , .







Go 1.1 32-, 64- , , .. , 128 [3] .







, (, ), , , , .







. : (2013 ) Go , 1 GB 64 250 MB 32.









  1. , , , .
  2. ยซยป , 4096 , runtimeโ‹…morestack , , .
  3. 64- Windows 32 - Go 1.1.



All Articles