4 ms·
> If any thread runs in an infinite loop that doesn't call built in functions, the entire runtime will freeze. That's not entirely true. Go 1.3 introduced pre-
by enneff 12y ago
> If any thread runs in an infinite loop that doesn't call built in functions, the entire runtime will freeze.
That's not entirely true. Go 1.3 introduced pre-emptive scheduling, so now only the most trivial (useless) of infinite loops will hog the scheduler. But if you're doing real CPU-bound work you won't block other goroutines from executing.
- methodology 12y agoCorrect, pointless programs like this freeze but that's by design since they're pointless: package main import "fmt" func main() { go func() { for ;; {} }() for ;; { fmt.Println("still here") } } Even bigger pointless programs also freeze: package main import "fmt" func f(v int) int { return v+1 } func g(x int) int { if (x > 100) { return 1 } return 0 } func main() { go func() { for ;; { if g(f(111)) == 0 { break } } }() for ;; { fmt.Println("still here") } } This is of course by design, because Go was designed only to support useful programs. The programmer trying to figure out how the concurrency model works may whine that it's inconsistent and he can't figure it out, but that's only granted because threading is hard. Go makes it easier by only supporting useful cases.