<a id="worker-cont"></a>

# Worker

> See first: [User docs | Worker](#worker-cont)

In Juju, a **worker** is any type that implements [the worker interface](https://documentation.ubuntu.com/juju/4.0/contributor/reference/worker-interface.md#worker-interface).

Examples of workers include [the dependency engine](https://documentation.ubuntu.com/juju/4.0/contributor/reference/dependency-package.md#newengine), instances run by the dependency
engine (the typical usage of the term “worker”),
and [watchers](https://github.com/juju/juju/blob/HEAD/core/watcher/watcher.go).

A Juju [agent](https://documentation.ubuntu.com/juju/4.0/contributor/reference/agent.md#agent-cont) runs one or more workers at the same time in parallel. A worker may run / be run by
another worker.

<!--
In Juju, a \*\*worker\*\* is, in its simplest form, a goroutine. Almost always, it watches for events and performs or dispatches work based on those events. (This is the essence of an agent-based system.) We never proactively emit events to workers – they’re just always watching and responding to changes (perform tasks based on the declared Juju status; the workers responsible for a unit / the uniter they watch state and then fire hooks to the charm).\*\*
-->
