anh lam web image

Đồng thời (Concurrency) và song song (Parallelism) khác nhau như thế nào?

Rất nhiều người trong chúng ta đã nhầm lẫn hoặc mơ màng về 2 thuật ngữ đồng thời (Concurrency) và song song (Parallelism), thực ra 2 thuật ngữ này  rất khác biệt đồng thời không phải là song song (concurrency is not parallelism), vậy nó khác biệt nhau như thế nào?

Concurrency is about dealing with lots of things at once. 

Parallelism is about doing lots of things at once.

 

Chúng ta hãy dành ra ít phút để chiêm nghiệm về  2 từ dealing (sự thỏa hiệp) và doing (làm) trong 2 câu trên nhé, nó khá rối nhưng cũng không kém phần thú vị.

Concurrency

Concurrency is about dealing with lots of things at once. 

Nó có ý nghĩa là trong một khoảng thời gian nào đó chúng ta có nhiệm vụ phải thực hiện và hoàn thành nhiều công việc, tuy nhiên chúng ta chỉ có thể thực hiện một công việc duy nhất tại một thời điểm ví dụ Trong khoảng thời gian 5 phút cuộc đời, chúng ta vừa code vừa lướt facebook để xem hình crush sự tập trung của chúng ta đã bị chi phối cực độ, chúng ta code được vài giây rồi lại xem hình crush mất vài phút sau đó lại quay lại code rồi lại xem hình crush, 5 phút cuộc đời trôi qua chúng ta đã làm được cho cuộc đời này là code và xem hình crush. Như vậy chúng ta đã làm 2 việc đồng thời (concurrency) trong một khoảng thời gian nào đó.

Đối với các chương trình máy tính cũng vậy các bạn có thể thấy hình bên dưới mô tả về đồng thời (concurrency) một CPU đang thực hiện 2 nhiệm vụ là Task 1 và Task 2  thì CPU sẽ xử lý Task 1 trong khoảng thời gian nào đó rồi lại quay sang xử lý Task 2 và cứ luân phiên đến khi hoàn thành cả 2 Task.

Paralellism

Parallelism is about doing lots of things at once

Nó có ý nghĩa là chúng ta có 2 hoặc nhiều nhiệm vụ phải làm trong một khoảng thời gian, cụ thể ở đây chúng ta có 2 nhiệm vụ và 2 nhiệm vụ đó sẽ được thực hiện một cách song song mà không có sự ngắt quảng.

Chúng ta là con người có một bộ não duy nhất để điều khiển các bộ phận khác trên cơ thể nên có ai vừa có thể vừa cột dây giày vừa đội mũ được không hay là vừa nghĩ đến crush và vừa nghĩ đến người yêu cũ cùng lúc trừ khi chúng ta có thêm đôi tay để vừa đội mũ vừa cột dây giày và có thêm 1 bộ não nữa để có 2 não 1 não nghĩ về crush và não còn lại sẽ nghĩ về người yêu cũ, kiểu đó giống như 3 đầu 6 tay thì mới làm được những điều song song (parallelism) như thế. 

Cũng giống như với máy tính CPU giống như bộ não, để xử lý nhiều công việc một cách song song (parallelism) thì nó cần có thêm não là sẽ có thêm CPU, các bạn có thể xem ví dụ parallelism ở hình bên dưới có 2 CPU, CPU 1 xử lý cho Task 1 và CPU sẽ xử lý cho Task 2 một cách song song.

Dưới đây là hình ảnh về đồng thời (Concurrency) và song song (Parallelism).

Lý do tại sao tạo nhiều luồng chạy song song (Parallelism) mà vẫn không cải thiện được hiệu suất?

Tạo nhiều task vụ chạy song song thì phải xem phần cứng số core có đáp ứng được hay không, khi phần cứng chỉ chạy được 2 luồng mà chúng ta tạo ra 10 luồng thì tốc độ vẫn vậy là đúng rồi, khi mà phần cứng đáp ứng được 4 luồng mà chúng ta mới chạy mới có 2 luồng thôi, sau đó tạo thêm 2 luồng nữa thì sẽ thấy hiệu suất thay đổi, còn không thì vẫn vậy à.

Tóm lại:

Con người được tạo hóa ban tặng là chỉ có thể thực hiện công việc một cách đồng thời (concurrency) thôi.

Vậy đối với con người nếu muốn làm tốt một việc gì đó đạt hiệu suất cao nhất thì chúng ta hãy tập trung làm việc đó thôi chứ đừng code và xem hình crush sẽ không code tốt lắm đâu.