goroutines 导致严重的减速和头痛

我在使用 goroutine 时遇到了一些问题。为什么这段代码在 ~125ms 内执行(注意顺序执行):


package main


import (

  "os/exec"

  "time"

  "fmt"

)


func main() {

  cmd := exec.Command("lessc", "--yui-compress", "test.less")

  n := 2000

  start := time.Now()

  for i := 0; i < n; i++ {

    cmd.Run()

  }

  finish := time.Now()


  fmt.Printf("Program took %v to run\n", finish.Sub(start))

}

当这段代码需要大约 20 秒时(使用 goroutines 并发执行):


package main


import (

  "os/exec"

  "time"

  "fmt"

)


func main() {

  cmd := exec.Command("lessc", "--yui-compress", "test.less")

  ch := make(chan bool)

  n := 2000

  start := time.Now()

  for i := 0; i < n; i++ {

    go lessc(ch, cmd)

  }

  fmt.Println(n, " goroutines started.")

  for i := 0; i < n; i++ {

    _ = <-ch

  }

  finish := time.Now()


  fmt.Printf("Program took %v to run\n", finish.Sub(start))

}


func lessc(ch chan bool, c *exec.Cmd) {


  c.Run()

  ch <- true

}

在 i7 720QM (4C/8T) 8GB RAM linux/x86-64 上使用 go 1.0.3 也使用 1.0.2 构建和测试,并在同一台机器上遇到了同样的问题。


潇潇雨雨
浏览 164回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go