| # Components vs. processes |
| |
| This document explains how the concept of components differs from processes and |
| related concepts. |
| |
| The Zircon kernel defines [processes][process] and other [task objects][tasks] |
| that are common in modern operating systems. The abstraction of |
| [component instances][topology.md#component-instances] sometimes correlates |
| with Zircon task abstractions, but not always. |
| |
| ## Examples |
| |
| The relationship between components and Zircon tasks differs, often as defined |
| by [component runners][runners.md] which implement strategies for launching |
| component instances. |
| |
| - [ELF Runner][elf_runner.md] launches components by creating a new |
| [job][job] that contains a process that's created from a given executable |
| file in ELF format. |
| - Dart Runner launches a new Dart isolate in a Dart Virtual Machine. A Dart |
| VM is implemented as a process that can host one or more Dart isolate. |
| Dart isolates execute on [threads][thread], but don't necessarily have an |
| assigned thread (this is a VM implementation detail). |
| - Web runner can launch one or more web pages as components, and host them |
| the same web engine container or in separate containers per its isolation |
| policy. Web pages are typically isolated by being hosted in separate |
| processes. |
| |
| [job]: /docs/reference/kernel_objects/job.md |
| [process]: /docs/reference/kernel_objects/process.md |
| [thread]: /docs/reference/kernel_objects/thread.md |
| [tasks]: /docs/reference/kernel_objects/objects.md#tasks |