간단한 작업자 풀을 구현하고 문제를 계속 실행하려고합니다. 내가하고 싶은 일은 더 많은 일을하기 전에 일정량의 일을하는 정해진 수의 근로자를 확보하는 것뿐입니다. 내가 비슷합니다 사용하고 코드 :Go의 간단한 작업자 풀
jobs := make(chan imageMessage, 1)
results := make(chan imageMessage, 1)
for w := 0; w < 2; w++ {
go worker(jobs, results)
}
for j := 0; j < len(images); j++ {
jobs <- imageMessage{path: paths[j], img: images[j]}
}
close(jobs)
for r := 0; r < len(images); r++ {
<-results
}
}
func worker(jobs <-chan imageMessage, results chan<- imageMessage) {
for j := range jobs {
processImage(j.path, j.img)
results <- j
}
}
나의 이해는이 한 번에 1 "일을"할 수있는이 명 노동자를 만들어야합니다 때까지 그들이 그 1 일을 완료로 더 많은 작업을 얻을 것이다가 그 외에 할일이 없다. 그러나 얻을 수 fatal error: all goroutines are asleep - deadlock!
내가 거대한 100 뭔가 버퍼를 설정하면이 작동하지만 한 번에 한 작업을 제한 할 수 싶어요.
나는 가깝지만 분명히 뭔가를 놓친 것처럼 느낍니다.
관련에 비슷한 구현을 체크 아웃 : [이 이동에 관용적 작업자 스레드 풀인가?] (http://stackoverflow.com/questions/38170852/is-this-an-idiomatic- worker-thread-pool-in-go) – icza