Docs học tập
Backend nền tảng

B1 · Process, Thread và Async

Process: bộ nhớ riêng, cô lập, tạo mới tốn kém.

B1 · Middle

Process như một căn bếp riêng đủ dụng cụ. Thread như nhiều đầu bếp dùng chung một bếp – nhanh nhưng dễ giành đồ của nhau. Async như một đầu bếp tranh thủ làm món khác trong lúc chờ nước sôi.

Cốt lõi

  • Process: bộ nhớ riêng, cô lập, tạo mới tốn kém.
  • Thread: dùng chung bộ nhớ trong process → nhẹ hơn nhưng cần đồng bộ (mutex, lock) để tránh race condition.
  • Async / coroutine / event loop: một luồng xử lý nhiều việc đang chờ I/O (Node.js, Python asyncio, goroutine của Go…).
  • Race condition: kết quả phụ thuộc thứ tự chạy của các luồng.

Đánh đổi

Việc nặng CPU → nhiều process/thread để tận dụng nhiều nhân. Việc chờ I/O (DB, API) → async hiệu quả hơn.

Trong thực tế

Node.js phục vụ hàng nghìn request đang chờ DB bằng một luồng; nhưng một tác vụ nén ảnh nặng CPU sẽ chặn tất cả.

Bug thường gặp

Biến đếm dùng chung giữa các thread tăng bằng count++ không khóa → kết quả thấp hơn thực tế.

Tự hỏi lại

Concurrency khác Parallelism thế nào?

On this page