Skip to content

unityvn/burst-jobs-ecs-and-dots-in-unity

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

Phân biệt Burst, C# Jobs, ECS và DOTS trong Unity

🧩 1. Burst Compiler

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.

✅ Mục đích

  • 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.

✅ Khi nào dùng

  • 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.

✅ Ví dụ

[BurstCompile]
public struct AddJob : IJobParallelFor {
    public NativeArray<float> a, b, result;
    public void Execute(int i) {
        result[i] = a[i] + b[i];
    }
}

⚙️ 2. C# Job System

C# Job System là framework đa luồng (multithreading) của Unity.

✅ Mục đích

  • 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 nào dùng

  • Khi có tác vụ lặp nhiều (AI, vật lý, mesh, pathfinding…).

✅ Ví dụ

var job = new AddJob { a = a, b = b, result = result };
JobHandle handle = job.Schedule(a.Length, 64);
handle.Complete();

💡 Tóm tắt

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ả

🧱 3. ECS (Entity Component System)

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ớ.

✅ Mục đích

  • 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.

✅ Thành phần

  • 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.

✅ Ví dụ

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;
        }
    }
}

🌌 4. DOTS (Data-Oriented Technology Stack)

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


🔍 Ví dụ so sánh

1️⃣ MonoBehaviour (C# thường)

void Update() {
    foreach (var enemy in enemies)
        enemy.position += enemy.velocity * Time.deltaTime;
}

2️⃣ Jobs + Burst

[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;
    }
}

3️⃣ ECS (DOTS đầy đủ)

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;
        }
    }
}

🧭 Tóm tắt cho dev Unity mobile

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 ⚠️ Tùy game 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

🧩 Kết luận

  • 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.

About

Distinguishing Burst, C# Jobs, ECS and DOTS in Unity

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published