Burst là trình biên dịch hiệu năng cao của Unity. Nó không phải framework hay kiến trúc mà là compiler giúp biên dịch C# sang mã máy SIMD tối ưu.
- Tăng tốc độ thực thi code C# lên gần như C/C++.
- Biên dịch các đoạn tính toán (struct, job) sang mã máy tối ưu cache.
- Dùng cho bất kỳ code C# nào có tính toán nặng.
- Phổ biến nhất khi kết hợp với C# Jobs.
[BurstCompile]
public struct AddJob : IJobParallelFor {
public NativeArray<float> a, b, result;
public void Execute(int i) {
result[i] = a[i] + b[i];
}
}C# Job System là framework đa luồng (multithreading) của Unity.
- Giúp code chạy song song trên nhiều CPU core một cách an toàn.
- Dễ tách các tác vụ nặng thành job để xử lý hiệu quả.
- Khi có tác vụ lặp nhiều (AI, vật lý, mesh, pathfinding…).
var job = new AddJob { a = a, b = b, result = result };
JobHandle handle = job.Schedule(a.Length, 64);
handle.Complete();| Thuộc tính | Burst | C# Jobs |
|---|---|---|
| Loại | Compiler | Multithreading Framework |
| Mục đích | Tăng tốc thực thi | Chạy song song nhiều core |
| Phạm vi dùng | Bất kỳ code tính toán | Tác vụ lặp nặng |
| Dùng cùng nhau | ✅ Rất hiệu quả |
ECS là kiến trúc dữ liệu theo hướng Data-Oriented, tập trung vào hiệu năng và tổ chức bộ nhớ.
- Tối ưu CPU cache, dễ song song hóa, phù hợp cho hàng chục nghìn entity.
- Tách dữ liệu và logic rõ ràng.
- Entity: ID đại diện cho đối tượng.
- Component: dữ liệu thuần (struct).
- System: xử lý nhóm entity có component tương ứng.
public partial struct MoveSystem : ISystem {
public void OnUpdate(ref SystemState state) {
foreach (var (pos, vel) in SystemAPI.Query<RefRW<Translation>, RefRO<Velocity>>()) {
pos.ValueRW.Value += vel.ValueRO.Value * SystemAPI.Time.DeltaTime;
}
}
}DOTS là hệ sinh thái bao gồm: ECS + C# Jobs + Burst Compiler.
| Thành phần | Vai trò | Mục tiêu |
|---|---|---|
| ECS | Kiến trúc dữ liệu | Data layout nhanh, cache-friendly |
| C# Jobs | Multithreading | Chạy song song |
| Burst | Compiler | Tối ưu cấp CPU |
DOTS = ECS + C# Job System + Burst Compiler
void Update() {
foreach (var enemy in enemies)
enemy.position += enemy.velocity * Time.deltaTime;
}[BurstCompile]
public struct MoveJob : IJobParallelFor {
public NativeArray<float3> positions;
public NativeArray<float3> velocities;
public float deltaTime;
public void Execute(int i) {
positions[i] += velocities[i] * deltaTime;
}
}public partial struct MoveSystem : ISystem {
public void OnUpdate(ref SystemState state) {
foreach (var (pos, vel) in SystemAPI.Query<RefRW<Translation>, RefRO<Velocity>>()) {
pos.ValueRW.Value += vel.ValueRO.Value * SystemAPI.Time.DeltaTime;
}
}
}| Công nghệ | Dùng cho | Có cần không? | Ghi chú |
|---|---|---|---|
| Burst | Tối ưu CPU, toán học | ✅ Nên dùng | Dễ tích hợp, hiệu quả cao |
| C# Job System | Song song hóa | ✅ Khi có tác vụ nặng | Kết hợp Burst rất tốt |
| ECS | Xử lý dữ liệu lớn | Dành cho hàng chục nghìn entity | |
| DOTS | Combo hiệu năng cao | ❌ Không cần cho mobile nhỏ | Tốt cho long-term project |
- Burst: Compiler tăng tốc cho C# code.
- C# Jobs: Chạy code đa luồng dễ dàng.
- ECS: Kiến trúc dữ liệu để quản lý hàng nghìn entity hiệu quả.
- DOTS: Gộp cả ba lại để đạt hiệu năng tối đa.
👉 Với game mobile, chỉ cần Burst + Job System là đủ. ECS/DOTS chỉ thật sự cần khi bạn xử lý mô phỏng quy mô cực lớn.