+2

[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

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí