美文网首页
一道看似简单的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程序的深入分析

    先上代码: 运行后估计大部分电脑是死循环(cpu核数大于10的会输出结果) 8核的可能有时能输出结果:7个大于0的...

  • Go基础知识

    1、小程序“hello world” 下面的代码可能是你遇到的最简单的GO程序: // helloworld.go...

  • 2018-08-08

    go 汇编 编译一个最简单的go执行程序 go build -gcflags "-N -l" test.go 使用...

  • 一个Go语言程序示例

    本文档介绍来自《Go语言编程》的简单Go语言程序示例。 程序结构 本程序是一个排序算法的实现,程序结构如下所示 创...

  • 并发编程

    学习来源:Go语言实战、blibli 黑马程序员 20小时快速入门go语言(中) Go语言的优势 Go语言设计简单...

  • 看似简单的一道js题

    下面js运行结果是? 要是对答案困惑可以参考这个解释: https://stackoverflow.com/que...

  • Go 语言结构

    在我们开始学习 Go 编程语言的基础构建模块前,让我们先来了解 Go 语言最简单程序的结构。 -Go Hello ...

  • Golang高并发工作池

    go程序开发过程中,通过简单的调用go func 函数来开启协程,容易导致程序死锁,并且会无限制的开启grouti...

  • Go 语言结构

    在我们开始学习 Go 编程语言的基础构建模块前,让我们先来了解 Go 语言最简单程序的结构。 Go Hello W...

  • 看似简单的不简单与看似不简单的简单

    Materials: However, a new Japanese study questions the us...

网友评论

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

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