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
...全文
647 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
chydn 2016-12-09
  • 打赏
  • 举报
回复
我把乘以2去掉过但是闹死对结果没影响
我看你有戏 2016-12-06
  • 打赏
  • 举报
回复
引用 楼主 chydn 的回复:
原文链接: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
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 * 3 //此处为什么要乘以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) var rev int for a := 1; a <= 9; a++ { fmt.Println("results",a) rev = <-results fmt.Println("收到数据:",rev) } } 这个*2可以改成别的值,看rev的值
不得闲 2016-11-29
  • 打赏
  • 举报
回复

2,190

社区成员

发帖
与我相关
我的任务
社区描述
go语言学习与交流版
社区管理员
  • go语言社区
  • Freeman Z
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧