设置
我写了这个小程序来看看执行线程是如何工作的。这是一个简化版本,你可以在github上找到完整的
func f(from string) { // Bench
// Loop for i < 40 -> fib(i)
}
func fib(n int64) int { // Something non-linear
// Fibonacci implementation
}
func main() {
go f("|||") // <- Should alternate
go f("---") // <-
var input string
fmt.Scanln(&input)
fmt.Println("done")
}
至于输出,前两行
||| fib( 0 ): 0
--- fib( 0 ): 0
然后一切都---取决于
--- fib( 28 ): 317811
在这一点上|||接管并单独上升到
||| fib( 29 ): 514229
最后,他们开始“并排”执行,完整的测试转储在这里
--- fib( 36 ): 14930352
||| fib( 36 ): 14930352
--- fib( 37 ): 24157817
||| fib( 37 ): 24157817
--- fib( 38 ): 39088169
||| fib( 38 ): 39088169
--- fib( 39 ): 63245986
||| fib( 39 ): 63245986
问题
我最初的假设是 -go f()我应该得到一个相对随机的并行执行,但它以不同大小的块交替,在 29 次调用 'f()' 到第一秒后收敛。为什么?什么是更好的测试?
桃花长相依
幕布斯7119047
相关分类