pool.go
func (pool *Pool) Run() {
	if pool.workers_started {
		panic("trying to start a pool that's already running")
	}
	for i := uint(0); i < uint(pool.num_workers); i++ {
		pool.worker_wg.Add(1)
		go pool.worker(i)
	}
	pool.workers_started = true
	// handle the supervisor
	if !pool.supervisor_started {
		pool.startSupervisor()
	}
}
func (pool *Pool) Run() {
	if pool.workers_started {
		panic("trying to start a pool that's already running")
	}
	for i := uint(0); i < uint(pool.num_workers); i++ {
		pool.worker_wg.Add(1)
		go pool.worker(i)
	}
	pool.workers_started = true
	// handle the supervisor
	if !pool.supervisor_started {
		pool.startSupervisor()
	}
}
// Run starts the Pool by launching the workers.
// It's OK to start an empty Pool. The jobs will be fed to the workers as soon
// as they become available.