Phân biệt Concurrency và Parallelism trong lập trình

1.Mở đầu

Hôm nay trong giờ thao tác đột nhiên mình thấy đồng nghiệp mình thắc mắc giữa 2 khái niệm concurrency và parallelism. Nhân tiện đó tôi cũng xin phép làm một nội dung bài viết san sớt hiểu biết của họ về 2 khái niệm có mối liên quan, dễ bị nhầm lẫn với nhau này

2.Concurrency và Parallelism

Tất cả chúng ta hãy thử tưởng tượng một lớp học máy tính như một dự án phần mềm. Mỗi 1 task là một request đến lớp học máy tính. Giả sử để hoàn thành dự án tất cả chúng ta cần hoàn thành 3 tasks (A, B, C).

Sequential (tuần tự)

Giả sử 1 nhân CPU tương đương với một lập trình viên A của đội Dev. Công việc sẽ tiến hành thực hiện một cách tuần tự:

  • Lập trình viên A thực hiện task A
  • Xong task A thực hiện task B
  • Xong task B thực hiện task C

Xử lý tuần tự

Các công việc được diễn ra một cách tuần tự xong việc này rồi mới tới việc tiếp theo, cứ như vậy công việc được thực hiện theo từng bước 1, phải chờ bước trước thực hiện xong mới thực hiện được bước tiếp theo. Trước kia máy tính thường chỉ có một nhân CPU (tương ứng đội Dev chỉ có một người), do đó đây là cách mà lớp học thực hiện dựa trên mô hình lập trình tuần tự (sequential).

Parallelism (song song)

Ngày này máy tính thường có nhiều nhân CPU (tương ứng với đội Dev có nhiều viên chức). Để tổ chức có thể tận dụng được hết nguồn lực đó chủ cửa hàng chia ra mỗi người phụ trách 1 task khác nhau.

  • Lập trình viên A làm task A.
  • Lập trình viên B làm task B.
  • Lập trình viên C làm task C.

Như vậy các task được thực hiện một cách song song. Đó là một ví dụ cho việc xử lý song song, các task được thực hiện trong cùng một thời điểm nhưng dự án chỉ hoàn thành khi cả 3 người hoàn thành task mà mình được giao.

Concurrency (song song)

Xử lý song song cũng giống với việc xử lý song song nhằm mục tiêu để xử lý nhiều tác vụ trong cùng một thời khắc. Tuy nhiên xử lý song song lại sở hữu sự khác biệt thông qua phương pháp xử lý. Như ví dụ trên để hoàn thành dự án ta cần hoàn thành cả 3 task. Tư tưởng của xử lý song song ta sẽ chia mỗi task trong 3 task đó thành những sub task nhỏ hơn, mỗi lập trình viên sẽ thực hiện một sub task (không nhất định sub task thuộc task nào miễn sao không có 2 người cùng làm 1 sub task). Khi xong 1 sub task sẽ tiếp tục làm tiếp 1 sub task tiếp theo. Nói một cách đơn giản tư tưởng của xử lý song song là chia công việc thành nhiều phần nhỏ, tận dụng thời kì chết của mỗi lập trình viên để xử lý một subtask khác nhằm tận dụng được tối đa nguồn lực.

Xử lý đồng thời

Tổng kết

Nội dung bài viết san sớt hiểu biết của họ mình về các khái niệm Parallelism và Concurrency trong lập trình. Hy vọng sẽ sở hữu được ích cho mọi người trong việc phân biệt các khái niệm. Cảm ơn mọi người đã theo dõi nội dung bài viết.

You May Also Like

About the Author: v1000