[Liệu bạn có biết] Bài 5: Concurrency - Parallelism
Bài viết hôm nay mình sẽ nhắc tới 2 khái niệm có thể các bạn sẽ bị nhầm lẫn là Concurrency và Parallelism ( hay còn được dịch ra tiếng việt là xử lí đồng thời - xử lí song song )
Concurrency và Parallelism
Trước khi giải thích rõ 2 từ này thì mình sẽ đi qua 1 ví dụ để giúp bạn hiểu rõ hơn tại sao lại có 2 khái niệm này.
Câu chuyện quán trà sữa
Giả sử bạn là chủ một quán trà sữa nhỏ, có rất nhiều khách đến gọi món liên tục:
-
Khách A gọi Trà sữa trân châu
-
Khách B gọi Trà đào cam sả
Trường hợp 1: Concurrency (xử lí đồng thời)
Ban đầu, quán bạn chỉ có một nhân viên và một máy pha trà. Nhân viên đó không thể làm hai ly cùng lúc, nhưng có thể xoay tua công việc thông minh như sau:
-
Pha trà cho khách A
-
Trong lúc chờ trà ngấm, tranh thủ nhận order của khách B
-
Khi trà A xong, quay lại cho topping và hoàn thành đơn A
-
Sau đó tiếp tục pha trà cho khách B
Từ góc nhìn của khách hàng, dường như cả hai đơn đều đang được xử lý “đồng thời”. Nhưng thực tế, nhân viên chỉ làm một việc tại mỗi thời điểm, chỉ là chuyển qua lại giữa các nhiệm vụ sao cho không bị lãng phí thời gian chờ đợi.
Đây chính là Concurrency — xử lý nhiều công việc xen kẽ nhau, giúp tối ưu thời gian và hiệu suất trong bối cảnh tài nguyên còn hạn chế.
Trường hợp 2: Parallelism (Tính song song)
Sau một thời gian, quán của bạn đông khách hơn. Bạn quyết định thuê thêm một nhân viên và mua thêm một máy pha trà và giờ đây:
-
Nhân viên 1 pha Trà sữa trân châu cho khách A
-
Nhân viên 2 pha Trà đào cam sả cho khách B
Cả hai người làm việc cùng lúc thật sự, mỗi người có thiết bị riêng, và cả hai đơn đều hoàn thành nhanh hơn đáng kể.
Đây chính là Parallelism — nhiều công việc được thực thi đồng thời thật sự, nhờ có nhiều tài nguyên phần cứng (nhiều nhân viên, nhiều CPU core, hoặc nhiều GPU).
Ở đây tại sao chúng ta lại cần phân biệt?
Hai khái niệm này cùng hướng đến việc xử lý nhiều tác vụ, nhưng phục vụ những mục tiêu khác nhau:
Concurrency | Parallelism | |
---|---|---|
Mục tiêu | Tối ưu việc quản lý nhiều tác vụ cùng lúc, dù chỉ có một tài nguyên xử lý | Tăng tốc độ xử lý thực tế bằng cách chạy thật sự nhiều tác vụ cùng lúc |
Hoạt động | Xen kẽ giữa nhiều công việc (context switching) | Chạy thật sự đồng thời trên nhiều lõi CPU/GPU |
Phù hợp với | I/O-bound (chờ mạng, chờ file, chờ user) | CPU/GPU-bound (tính toán nặng, xử lý dữ liệu lớn) |
Ví dụ | Server web xử lý hàng ngàn request bằng async | Nhân ma trận hoặc huấn luyện mô hình deep learning |
Nếu load/store (I/O) chiếm thời gian → dùng concurrency
Nếu tính toán nặng (compute-bound) → dùng parallelism
All rights reserved