
Trước khi bàn trực tiếp về Đồng bộ và bất đồng bộ (synchronous & asynchronous), chúng ta nên bàn về bối cảnh của việc sử dụng cặp từ này.
Có thể dễ dàng thấy chúng liên quan tới một cái gì đó có số nhiều. Bạn không bao giờ có thể dùng từ synchronous hay asynchronous cho trường hợp chỉ duy nhất một được. Mở rộng ra chúng còn thường được dùng liên quan tới những quá trình có khả năng tái diễn cao. Như vậy chúng nên được xem xét trong một phạm vi của tập hợp nhiều phần tử, những phần tử này có thể là dữ liệu, tín hiệu, tiến trình xử lý hay tác vụ.
1. Synchronous (đồng bộ):
Là khái niệm nói lên tính nguyên tắc, nó đòi hỏi các dữ liệu, tiến trình ... có liên quan phải được kết nối, liên hệ theo một trình tự thực hiện, một định dạng, ...cách thức cố định, không bao giờ thay đổi. Trong một chuỗi các hàm của một quy trình có n tác vụ, nếu nó được bảo là đồng bộ thì trình tự thực hiện các hàm đó sẽ không bao giờ thay đổi. Hàm A đã được thiết lập để được gọi và chạy trước hàm B thì dù có phải đợi dài cổ hàm B cũng phải chờ hàm A kết thúc mới được phép bắt đầu. Một dây chuyền sản xuất công nghiệp của một nhà máy có thể coi là một quá trình đồng bộ.
2.Asynchronous (bất đồng bộ):
Là một khái niệm có thể nói là ngược lại với Synchronous. Nó nói lên sự thiếu chặt chẻ, tính liên kết yếu, quản lý vô cùng khó khăn (đôi khi không biết đâu mà lần :p) tuy nhiên lại uyển chuyển và khả năng tùy biến cao. Trong một chuỗi các hàm của một quy trình có n tác vụ, nếu nó được bảo là bất đồng bộ thì có nghĩa là cho dù hàm B được gọi sau hàm A nhưng không ai đảm bảo được rằng hàm A sẽ phải kết thúc trước hàm B và hàm B bắt buộc phải chỉ được gọi chạy khi hàm A kết thúc.
Trong một xã hội đồng bộ, kẹt xe xãy ra, xe nọ nối đuôi xe kia trong đúng làn đường vì đơn giản mọi thành phần tham gia giao thông đều tuân thủ nguyên tắc trước sau (FIFO) và quy định đi đúng phần đường. Tuy nhiên trong một xã hội thiếu đồng bộ thì khi kẹt xe bạn có thể vác xe lên vai, hay phóng xe lên vỉa hè rồi tót lên trên, lao bừa vô hẻm, phân tích thiệt hơn chúng ta sẽ thấy sự ưu khuyết của hai quan điểm hành xữ Asynchronous và Synchronous có phần mang tính hên xui :p và tùy tình huống ứng dụng.
Thông thường người ta dễ hiểu Asynchronous gần với sự lộn xộn hay ngẫu nhiên (random), tôi không phủ định, tuy nhiên trong kỉ thuật, sự ba hồi ba phèng của Asynchronous thông thường trong khuôn khổ. Giống như khi bạn học trong một trường không cần đồng phục nhưng hãy thử bận bikini đi học xem :). Vì vậy hãy suy nghĩ về cặp khái niệm này trên cơ sở thuyết tương đối :).
Một lưu ý hết sức hay ho nữa được rút ra từ những gì đã nói ở trên là Asynchronous thường mang tính thực tế, tiệm cận với các xử lý thời gian thực, gần tính người, ít máy móc hơn Synchronous. Hãy suy nghĩ về lưu ý này với những ưu khuyến đã đề cập ở trên để liên hệ tới thực tiễn ứng dụng của bạn.
Dưới đây là ví dụ cụ thể về cách áp dụng khái niệm Asynchronous và Synchronous trong kỉ thuật lập trình:
/*1. cách thức nạp dữ liệu một cách không đồng bộ (asynchronously ) qua thiết bị*/
int iBlabla = 1;
void writerCall();
...
{
callbackStruct.fxn = writerCall
callbackStruct.fxn = NULL;
size = sizeof(userStruct);
status = GIO_submit(gioChan, IOM_WRITE, &userStruct, &size, &callbackStruct);
iBlabla = iBlabla + 1;
...
}
void writeCall()
{
iBlabla = 0;
}
// Yêu cầu nạp dữ liệu qua cổng thiết bị của hàm GIO_submit được chuyển vào hàng đợi, khi yêu cầu này được xử lý xong thì hàm writeCall được khởi phát. Trong khi quá trình này diễn ra iBlabla = iBlabla + 1; vẫn tiếp tục được thực hiện mà không chờ.
/*2. cách thức nạp dữ liệu một cách đồng bộ (synchronously ) qua thiết bị*/
size = sizeof(userStruct);
status = GIO_submit(gioChan, IOM_WRITE, &userStruct, &size, NULL);
iBlabla = iBlabla + 1;
// Yêu cầu nạp dữ liệu qua cổng thiết bị của hàm GIO_submit được chuyển vào hàng đợi, khi yêu cầu này được xử lý xong thì trạng thái status được trả về. Trong khi quá trình này diễn ra iBlabla = iBlabla + 1; phải chờ để thực hiện tuần tự.
Bạn không cần phải hiểu các hàm của ví dụ trên, thay vì thế hãy cố gắng hiểu ý niệm mà ví dụ này muốn chuyển tải.
Nguồn: www.ieev.org
Bạn Có Đam Mê Với Vi Mạch hay Nhúng - Bạn Muốn Trau Dồi Thêm Kĩ Năng
Mong Muốn Có Thêm Cơ Hội Trong Công Việc
Và Trở Thành Một Người Có Giá Trị Hơn
Bạn Chưa Biết Phương Thức Nào Nhanh Chóng Để Đạt Được Chúng
Hãy Để Chúng Tôi Hỗ Trợ Cho Bạn. SEMICON
Hotline: 0972.800.931 - 0938.838.404 (Mr Long)