我正在通過製作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