Instead of spawning one goroutine per job, start N workers that read from a jobs channel. This bounds memory and downstream load. The producer closes the jobs channel when done; workers exit when range ends.