worker

worker is a small Go pool for func() tasks. Create it with a minimum and maximum worker count, then submit tasks:

pool, err := worker.New(2, 8)
if err != nil {
	return err
}
defer pool.Close()

if err := pool.Submit(func() { doWork() }); err != nil {
	return err
}

The pool creates the minimum workers immediately and grows on demand up to the maximum. Its task queue has a fixed capacity of maxWorkers/2; once all workers and queue slots are occupied, Submit waits for room. Close stops new submissions and waits for accepted tasks to finish. A successful Submit means the task was accepted; it does not mean the task has started or finished. With maxWorkers == 1, the queue has zero capacity and submissions wait for a worker.

After a task finishes, a worker exits immediately only when total > min and the number of other idle workers is greater than min/2. There is no idle timeout. A task panic is logged and that worker continues with later tasks.

Tasks should return normally or panic. runtime.Goexit terminates its worker without replacement. If the last worker exits this way, queued accepted tasks are discarded so Close can return; if other workers remain, they keep the queue. Call Close from outside pool tasks so it does not wait for itself.

A task may submit another task to the same pool. If all workers block submitting to a full queue, the caller must resolve that deadlock in its task logic.

Description
No description provided
Readme 90 KiB
Languages
Go 100%