我是 golang 的新手,并试图了解 workerpool 的工作原理。如果我运行一次并且尝试多次运行我会感到恐慌,则以下示例程序可以正常工作:发送关闭通道错误。Go 版本是 go1.14.2
package main
import (
"fmt"
"time"
)
func main() {
jobs := make(chan int, 10)
results := make(chan int, 10)
for x := 1; x <= 3; x++ {
go worker(x, jobs, results)
}
for j := 1; j <= 6; j++ {
jobs <- j
}
close(jobs)
for r:=range results{
fmt.Println("Result received from worker: ", r)
}
}
func worker(ID int, jobs <-chan int, results chan<- int) {
for job := range jobs {
fmt.Println("Worker ", ID, " is working on job ", job)
time.Sleep(1000*time.Millisecond)
fmt.Println("Worker ", ID, " completed work on job ", job)
results <- job
}
close(results)
}
第一次运行没问题
go run main.go
Worker 3 is working on job 1
Worker 1 is working on job 2
Worker 2 is working on job 3
Worker 2 completed work on job 3
Worker 2 is working on job 4
Result received from worker: 3
Worker 1 completed work on job 2
Worker 1 is working on job 5
Result received from worker: 2
Worker 3 completed work on job 1
Worker 3 is working on job 6
Result received from worker: 1
Worker 3 completed work on job 6
Result received from worker: 6
第二次运行给出了这个。
Worker 3 is working on job 2
Worker 2 is working on job 3
Worker 1 is working on job 1
Worker 3 completed work on job 2
Worker 3 is working on job 4
Worker 2 completed work on job 3
Worker 2 is working on job 5
Worker 1 completed work on job 1
Worker 1 is working on job 6
Result received from worker: 2
Result received from worker: 3
Result received from worker: 1
Worker 1 completed work on job 6
Worker 3 completed work on job 4
Result received from worker: 6
panic: send on closed channel
谁能帮我理解发生了什么?
皈依舞
临摹微笑
眼眸繁星
随时随地看视频慕课网APP
相关分类