blob: ca2bbf8f588aa7b6b23246e091cf2935915c6e0b [file] [log] [blame] [view]
# Components vs. processes
This document explains how the concept of components differs from processes and
related concepts.
The Zircon kernel defines [processes] and other [task objects] that are common
in modern operating systems. The abstraction of [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], which implement strategies for launching component
instances.
- [ELF Runner] launches components by creating a new [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], 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.
[processes]: /docs/reference/kernel_objects/process.md
[task objects]: /docs/reference/kernel_objects/objects.md#tasks
[component instances]: /docs/concepts/components/v2/topology.md#component-instances
[component runners]: /docs/concepts/components/v2/capabilities/runner.md
[ELF Runner]: /docs/concepts/components/v2/elf_runner.md
[job]: /docs/reference/kernel_objects/job.md
[threads]: /docs/reference/kernel_objects/thread.md