Python cung cấp ba mô hình concurrency, và chọn đúng phụ thuộc chủ yếu vào việc công việc của bạn là I/O-bound hay CPU-bound — một quyết định bị định hình mạnh bởi GIL (vốn ngăn các thread chạy code Python song song).
Ba mô hình
threading → nhiều thread, MỘT tiến trình. Bị giới hạn bởi GIL với CPU.
multiprocessing → nhiều TIẾN TRÌNH, mỗi cái có interpreter/GIL riêng → song song thực sự.
asyncio → một thread, các coroutine hợp tác nhường quyền tại điểm await.
