这个的输出怎么那么奇怪呢?

来源:10-2 go语言的调度器

weibo_隱懓_0

2018-03-01

package main

import (
   "fmt"
   "runtime"
)

func main() {
   runtime.GOMAXPROCS(1)
   //var wg sync.WaitGroup
   //wg.Add(2)
   ch_a := make(chan bool)
   ch_A := make(chan bool)
   ch_A1 := make(chan bool)
   fmt.Println("Start")

   go func() {
      // defer wg.Done()
      for count := 0; count < 3; count++ {
         for char := 'a'; char < 'a'+26; char++ {
            fmt.Printf("%c", char)
         }
      }
      fmt.Println()
      ch_a <- true
   }()

   go func() {
      // defer wg.Done()

      for count := 0; count < 3; count++ {
         for char := 'A'; char < 'A'+26; char++ {
            fmt.Printf("%c", char)
         }
      }
      fmt.Println()
      ch_A <- true
   }()

   go func() {
      // defer wg.Done()

      for count := 0; count < 3; count++ {
         for char := 'B'; char < 'A'+26; char++ {
            fmt.Printf("%c", char)
         }
      }
      fmt.Println()
      ch_A1 <- true
   }()
   fmt.Println("Wait to finish")
   //wg.Wait()
   <-ch_a
   <-ch_A
   <-ch_A1
   fmt.Println("end")
}

为什么先打印了最后面的goroutine内容,

不是这些goroutine会放在逻辑处理器的全局队列里等待执行吗。

写回答

1回答

ccmouse

2018-03-01

请问您输出了啥,具体哪里奇怪?goroutine并发运行起来结果并不确定的。
总的来说,不是全局队列,而且像线程那样并发执行,所以可能最后的先出来。

0
1
weibo_隱懓_0
开启1个逻辑CPU的时候,结果是先打印最后的大写的字母,然后后打印最前面的小写的字母,再然后打印小写字母下面的大写字母。这个在多个环境下结果都一样。
2018-03-07
共1条回复

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程