美文网首页
一道看似简单的go程序的深入分析

一道看似简单的go程序的深入分析

作者: 张金富呵呵 | 来源:发表于2018-07-04 10:34 被阅读14次

    先上代码:

    func main() {
        var a [10]int
        for i := 0; i < 10; i++ {
            go func(i int) {
                for {
                    a[i]++
                }
            }(i)
        }
        time.Sleep(time.Millisecond)
        fmt.Println(a)
    }
    

    运行后估计大部分电脑是死循环(cpu核数大于10的会输出结果)

    8核的可能有时能输出结果:7个大于0的数和3个0

    有时是死循环

    原因分析:

    1. goroutine是非抢占式的 除非主动交出控制权
    2. goroutine可能合用一个线程

    由于这两个原因导致结果是不确定的 除非cpu核数大于10

    补充:
    goroutine在下列情况下可能会交出控制权:


    QQ图片20180704110356.png

    相关文章

      网友评论

          本文标题:一道看似简单的go程序的深入分析

          本文链接:https://www.haomeiwen.com/subject/pateuftx.html