Code Demo · Go · Concurrent Worker Pool

go
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