我正在通过制作1000名工作人员的工作区来播放频道。目前,我收到以下错误:Workerpool上的频道死锁
fatal error: all goroutines are asleep - deadlock!
这里是我的代码:
package main
import "fmt"
import "time"
func worker(id int, jobs <-chan int, results chan<- int) {
for j := range jobs {
fmt.Println("worker", id, "started job", j)
time.Sleep(time.Second)
fmt.Println("worker", id, "finished job", j)
results <- j * 2
}
}
func main() {
jobs := make(chan int, 100)
results := make(chan int, 100)
for w := 1; w <= 1000; w++ {
go worker(w, jobs, results)
}
for j := 1; j < 1000000; j++ {
jobs <- j
}
close(jobs)
fmt.Println("==========CLOSED==============")
for i:=0;i<len(results);i++ {
<-results
}
}
这究竟是为什么?我还是新来的,我希望能够理解这一点。
目前两个通道都在100缓冲为何仍发生,如果我删除缓冲区? – rhillhouse
如果您未指定通道大小,则会得到0的缓冲区大小,这意味着写入通道的通道将阻塞,直到读取器可用。您无法通过设计创建无限大小的频道(例如,这可能会导致服务器内存使用量不受限制)。 – Thomas