我在使用 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 回答
- 0 關注
- 186 瀏覽
添加回答
舉報
0/150
提交
取消