Kernel-level threads: nhân biết và tự lập lịch từng thread. Chuyển thread cần vào kernel (tốn hơn), nhưng nhiều thread chạy song song thật trên nhiều lõi, và một thread block I/O không chặn cả tiến trình.
User-level threads: quản lý bởi thư viện ở userspace, nhân chỉ thấy một tiến trình. Tạo/chuyển thread rất nhanh (không vào kernel); nhưng nếu một thread gọi blocking syscall thì cả tiến trình bị block, và khó tận dụng nhiều lõi (nhân không biết các thread).
Ba mô hình ánh xạ user ↔ kernel:
- Many-to-One: nhiều user thread → 1 kernel thread. Nhanh nhưng một block là chặn hết, không song song thật.
- One-to-One: mỗi user thread ↔ 1 kernel thread. Song song thật, block độc lập; nhưng tạo thread tốn kém, giới hạn số lượng. (Linux/Windows dùng mô hình này.)
- Many-to-Many: ghép M user thread lên N kernel thread (N ≤ M). Linh hoạt nhất nhưng cài đặt phức tạp.