Closed
Description
If you run this code with only one go routine:
package main
import "fmt"
import "runtime"
import "time"
func cpuIntensive(p *int) {
for i := 1; i <= 100000000000; i++ {
*p = i
}
}
func main() {
runtime.GOMAXPROCS(1)
x := 0
go cpuIntensive(&x)
time.Sleep(100 * time.Millisecond)
// printed only after cpuIntensive is completely finished
fmt.Printf("x = %d.\n", x)
}
Scheduler is paralized, and Printf is NOT printed after 100ms as expected, but after all job is done in cpuintensive() go routine.
But if programmer insert runtime.Gosched()
in intensive for loop of routine, cooperative scheduler works fine.
Is this by design or are there plans to make Golang scheduler preemptive?