# Performant

Fuchsia is a commercial operating system designed for real world product
requirements and optimized for performance. Fuchsia efficiently manages system
resources—processors, memory, storage, networking, and power—to optimize
performance across a variety of platforms, architectures, and devices.

## Flexibility and efficiency

**[Design principles][design-principles] prioritize performance**

Fuchsia enables programs to run as fast as the hardware allows. Whether it’s
choosing a [programming language][programming-language] or deciding between
[structs and tables][structs-and-tables], Fuchsia is designed to give developers
flexibility while maximizing efficiency.

## Performance benchmarks

**Every subsystem on Fuchsia is [benchmarked] to evaluate
performance**

Comparing Fuchsia’s overhead to previous builds and other operating systems
ensures that Fuchsia meets performance expectations. While Fuchsia does not
yet achieve its performance goals in all areas, it is an area under active
development.

## A flexible scheduler optimizes the system

**[Fair scheduling][fair-scheduling] gives the system more flexibility**

Increasing the choices available to the system scheduler gives the scheduler the
flexibility to optimize for power, throughput, or latency, as appropriate for
the situation. At any given time, there are more threads in the system that are
ready to do useful work than there would be if threads commonly blocked one another.

## Asynchronous communication

**APIs use [asynchronous communication][async-com] to reduce latency**

Fuchsia makes heavy use of asynchronous communication, which reduces latency by
letting the sender proceed without waiting for the receiver. This is important
for delivering software that can come and go on a device as needed, to account
for network latency.

[design-principles]: /docs/contribute/governance/rfcs/0027_you_only_pay_what_you_use.md
[programming-language]: /docs/contribute/governance/rfcs/0082_starnix.md
[structs-and-tables]: /docs/contribute/governance/rfcs/0047_tables.md#should_i_use_a_struct_or_a_table
[benchmarked]: /src/tests/benchmarks
[fair-scheduling]: /docs/concepts/kernel/fair_scheduler.md
[async-com]: /docs/concepts/fidl/overview.md#messaging_models