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.