我在使用 goroutine 时遇到了一些问题。为什么这段代码在 ~125ms 内执行(注意顺序执行):package mainimport ( "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 mainimport ( "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 构建和测试,并在同一台机器上遇到了同样的问题。
1 回答
- 1 回答
- 0 关注
- 163 浏览
添加回答
举报
0/150
提交
取消