How exactly are goroutines scheduled? Is it some sort of function interception mechanism? Also if I run the program on one CPU will the results be the same if I run the program twice?