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?