
Unity Job System Tutorial – Improve Game Performance with Multithreading
June 5, 2026
How to Spawn 100,000 Entities in Unity DOTS
June 5, 2026As modern games become more complex, performance optimization becomes increasingly important. Traditional object-oriented programming works well for many systems, but it can become inefficient when dealing with thousands or even millions of objects in a game world.
To address these challenges, Unity introduced a new architecture called DOTS (Data Oriented Technology Stack). DOTS is designed to help developers build high‑performance games that take full advantage of modern CPUs.
Instead of focusing on objects and behaviors, DOTS focuses on data layout and memory efficiency. This shift in design allows Unity to process massive amounts of data much faster than traditional approaches.
In this article, we will explain what Unity DOTS is, how it works, and why it can dramatically improve the performance of your games.
What is Unity DOTS?
DOTS stands for Data Oriented Technology Stack. It is a collection of technologies built by Unity to create high‑performance, multithreaded systems.
The DOTS architecture is based on three main technologies:
- Entity Component System (ECS)
- Unity Job System
- Burst Compiler
Together, these technologies allow developers to write highly optimized code that runs efficiently across multiple CPU cores.
The main goal of DOTS is to process large amounts of data in the most efficient way possible.
Data-Oriented Design vs Object-Oriented Design
Traditional Unity development is based on object-oriented programming. In this model, developers create GameObjects and attach MonoBehaviour scripts to define behavior.
While this approach is simple and flexible, it can become inefficient when dealing with very large numbers of objects.
Data-oriented design takes a different approach. Instead of focusing on objects, it focuses on how data is stored and processed in memory.
By organizing data in a way that is friendly to CPU caching and parallel processing, systems can run significantly faster.
This concept is the core philosophy behind DOTS.
Entity Component System (ECS)
One of the most important parts of DOTS is the Entity Component System.
ECS separates game data into three main parts:
- Entities
- Components
- Systems
Entities
An entity represents a unique object in the game world. Unlike GameObjects, entities are extremely lightweight and contain no logic.
They simply act as identifiers that link components together.
Components
Components store data. They contain only data and no behavior.
For example, a movement component might contain position and speed values.
using Unity.Entities;
public struct MovementData : IComponentData
{
public float speed;
}
Systems
Systems contain the logic that processes components. They read and modify component data across many entities at once.
Because systems operate on large batches of data, they are extremely efficient and can easily run in parallel using the Job System.
using Unity.Entities;
using Unity.Transforms;
using Unity.Mathematics;
public partial struct MovementSystem : ISystem
{
public void OnUpdate(ref SystemState state)
{
float deltaTime = SystemAPI.Time.DeltaTime;
foreach (var transform in SystemAPI.Query<RefRW<LocalTransform>>())
{
transform.ValueRW.Position += new float3(0, 1, 0) * deltaTime;
}
}
}
The Unity Job System in DOTS
The Unity Job System plays a crucial role in DOTS. It allows systems to run their work across multiple CPU threads.
Instead of running everything on the main thread, Unity schedules jobs that can execute in parallel.
This makes it possible to process thousands of entities simultaneously without blocking the main thread.
The Job System also ensures that jobs run safely by managing memory access and dependencies automatically.
Burst Compiler
The Burst Compiler is another key component of DOTS.
Burst is a highly optimized compiler that converts C# code into extremely efficient native machine code.
When combined with ECS and the Job System, Burst can significantly increase performance by optimizing memory access patterns and vectorizing calculations.
using Unity.Burst;
using Unity.Jobs;
[BurstCompile]
public struct ExampleJob : IJob
{
public void Execute()
{
// Highly optimized code
}
}
In many cases, Burst can make code several times faster than normal managed C# execution.
Why DOTS is So Fast
DOTS achieves high performance because it focuses on memory layout and data processing efficiency.
Traditional object-oriented systems often scatter data across memory, forcing the CPU to constantly load new memory locations.
DOTS organizes data in contiguous memory blocks, which improves cache usage and allows the CPU to process data much faster.
In addition, the ability to run jobs across multiple CPU cores dramatically increases the amount of work that can be done each frame.
When Should You Use DOTS?
DOTS is especially useful in projects that require processing large numbers of entities.
Examples include:
- Large-scale simulations
- Massive crowds or armies
- Procedural worlds
- Strategy games with many units
- Physics-heavy environments
In these scenarios, DOTS can provide huge performance improvements compared to traditional Unity workflows.
When DOTS May Not Be Necessary
While DOTS is powerful, it is not required for every project. Many small or medium-sized games work perfectly well with the traditional GameObject and MonoBehaviour architecture.
DOTS also introduces new patterns and workflows that may take time to learn.
If your game does not process large amounts of data, the additional complexity may not be worth it.
DOTS and the Future of Unity
Unity has been steadily improving DOTS over the past few years. Many modern Unity systems are now being designed with data-oriented principles in mind.
As hardware continues to evolve and CPUs gain more cores, architectures like DOTS will become increasingly important for high-performance game development.
Developers who learn DOTS today will be well prepared for the future of Unity development.
Conclusion
Unity DOTS represents a major shift in how games can be built and optimized. By focusing on data-oriented design, multithreading, and efficient memory usage, DOTS enables developers to create systems that scale far beyond traditional approaches.
Although it requires learning new concepts such as ECS, Jobs, and Burst, the performance benefits can be enormous—especially for large or complex games.
For developers who want to push Unity to its limits, understanding DOTS is an essential step toward building the next generation of high-performance games.










