Code Demo · Go · Concurrent Worker Pool
go
By anonymousgo
package main
import (
"fmt"
"sync"
)
func main() {
jobs := make(chan int)
results := make(chan int)
var group sync.WaitGroup
for worker := 1; worker <= 3; worker++ {
group.Add(1)
go func(id int) {
defer group.Done()
for job := range jobs {
fmt.Printf("worker %d processed job %d\n", id, job)
results <- job * job
}
}(worker)
}
go func() {
for job := 1; job <= 5; job++ {
jobs <- job
}
close(jobs)
group.Wait()
close(results)
}()
for result := range results {
fmt.Println("result:", result)
}
}596 characters36 lines< 1.7 KB