go语言工作池
chydn 2016-11-29 10:09:50 原文链接:https://gobyexample.com/worker-pools
package main
import "fmt"
import "time"
func worker(id int, jobs <-chan int, results chan<- int) {
for j := range jobs {
fmt.Println("worker", id, "processing job", j)//@2
results <- j * 2 //此处为什么要乘以2
time.Sleep(time.Second)
}
}
func main() {
jobs := make(chan int, 100)
results := make(chan int, 100)
for w := 1; w <= 1; w++ {
go worker(w, jobs, results)
}
for j := 1; j <= 9; j++ {
jobs <- j
fmt.Println("processing job",j) //@1
}
close(jobs)
for a := 1; a <= 9; a++ {
fmt.Println("results",a)
<-results
}
}
执行结果:
processing job 1
processing job 2
processing job 3
processing job 4
processing job 5
processing job 6
processing job 7
processing job 8
processing job 9
results 1
worker 1 processing job 1
results 2
worker 1 processing job 2
results 3
worker 1 processing job 3
results 4
worker 1 processing job 4
results 5
worker 1 processing job 5
results 6
worker 1 processing job 6
results 7
worker 1 processing job 7
results 8
worker 1 processing job 8
results 9
worker 1 processing job 9
请问标注出为什么要乘以2,本人刚学习channel,这个例子的执行先后顺序也是种没搞懂为啥先执行@1再执行@2