Lập trình | Phân biệt đồng bộ và bất đồng bộ

MỤC LỤC:

Ảnh của cottonbro từ Pexels

Bạn mới bước chân vào lập trình, hay còn đang đi học, 

Liệu đã bao lần bạn gặp phải từ khóa sync - synchronous và async - asyn chronous mà canh cánh trong lòng, liệu chính xác nó là cái gì.

Tôi cũng vậy, thật khó chịu, nếu chưa tìm ra được câu hỏi cho một vấn đề mà nếu vướng nó, ta sẽ khó để hiểu các vấn đề khác. 

Hãy cùng tôi hiểu rõ hơn về nó.

Nó cũng đơn giản thôi, đừng lo, 😏

1/ Đồng bộ (sync – synchronous)

"Đồng bộ chính là chạy từ đầu đến cuối theo code mà ta viết(chạy tuần tự)."

Ta đặt ra 1 luồng sự kiện, và nó thực hiện tuần tự, cho xong hết, thì mới sang việc khác.

int a1 = 0;
int a2 = 1;
int a3 = 2;

int ketQua = a1 + a2 + a3;
int ketQua2 = a2 + a3;

Với đoạn code trên, nó sẽ chạy từ đầu đến cuối là khởi tạo a1, a2, a3 sau đó tính ketQua trước rồi tới ketQua2 và kết thúc.

Đồng bộ chính là chạy tuần tự từ trên xuống dưới theo mình viết, và nó sẽ chỉ thực hiện duy nhất trong 1 thread(luồng).

VD thực tế: Bạn chiên trứng, xong bạn mới bắt đầu nấu cơm. Kết thúc bạn sẽ bắt đầu ăn.

2/ Bất đồng bộ (async – asynchronous)

Đây là 1 loại khác rất là hay và độc đáo và nó khác so với đồng bộ rất nhiều.

"Bất đồng bộ là ta sẽ đặt ra job nào đó thực hiện riêng, và trong lúc nó thực hiện riêng, ta sẽ làm công việc khác."

Quy trình:

Ta đặt ra 1 task cho máy tính

Trong lúc ta đợi cho nó hoàn thành, ta có thể yêu cầu máy tính làm một việc khác

Và sau khi nó hoàn thành, ta chạy callback function để lấy kết quả

Có nghĩa là trong 1 số dạng task, ta có thể giảm bớt được thời gian xử lý khi sử dụng bất đồng bộ vì ta đã giảm thiểu được thời gian chờ đợi 1 task nào đó hoàn thành.

Bất đồng bộ cũng chỉ sử dụng trong 1 thread(luồng)

VD thực tế: Bạn chiên trứng, đặt thời gian(callback), bạn cũng nấu cơm, đặt thời gian. Trong lúc nó nấu, bạn dọn dẹp bếp hay làm abcxyz gì đó. Sau khi nấu xong, bạn bắt đầu ăn cả 2.

3/ Kết luận

Vậy đối với 2 loại và tùy trường hợp, tình huống khác nhau, ta sẽ sử dụng nó đúng lúc và đúng thời điểm để được performance tốt nhất cũng như kiểm soát được quy trình, dữ liệu của phần mềm.


Cảm ơn các bạn đã quan tâm bài viết!
Tuấn Ti Tiện

Author:

Tôi là Tuấn Anh, một lập trình viên C++, hiện tại đang làm việc với Qt Framework. Giờ đã là bố của một thanh niên nhỏ, gần đây tôi thấy mình cần sống có trách nhiệm hơn nữa. : ]] Tôi cảm thấy nếu tôi không có nơi nào đó để ghi lại, tôi sẽ quên mất nhiều thứ. Dấu chân trên cát cũng vậy, nếu ta không chụp ảnh nó lại, rồi nó cũng sẽ bị gió làm mờ đi dần rồi mất hút hẳn. Cảm ơn anh em đã ghé qua và đọc những gì tôi viết. Hữu duyên thiên lý Ngô tương nặng, à nhầm Năng tương ngộ. : ]] Thân ái 3000!
© Giao diện website thiết kế bởi TuanTiTien.com