Định nghĩa dễ hiểu về “sự kiện không đồng bộ”? [đóng cửa]


88

Tôi đã gặp thuật ngữ này rất nhiều và ngay cả sau khi sử dụng Google, vẫn không thể hiểu chính xác nghĩa của nó. Có một số định nghĩa dễ hiểu (lý tưởng là với các ví dụ) về sự kiện không đồng bộ mà ai đó có thể cung cấp là gì không?

Cảm ơn!

Câu trả lời:


422

Ví dụ không lập trình:

Đồng bộ Bạn muốn có một chiếc bánh pizza cho bữa tối và bạn không thích loại đông lạnh. Vì vậy, bạn phải ngừng chơi WOW, điều này làm xáo trộn bang hội của bạn. Bạn vào bếp, nhào bột, phủ sốt lên trên, thêm phô mai và phủ lên trên là thịt xông khói yêu thích. Bạn vừa dành 20 phút thời gian để làm bánh pizza với 10 phút nữa trong lò nướng. Đồng hồ hẹn giờ kêu bíp và bạn kéo chiếc bánh nóng hổi ra. Bạn có thể ngồi xuống trước máy tính, ăn pizza và tiếp tục cuộc đột kích của mình.

Không đồng bộ Bạn muốn có một chiếc bánh pizza cho bữa tối khi chơi WOW. Bạn mở cửa sổ trình duyệt trên màn hình thứ 5 của mình. Bạn tải lên trang web Pizza và đặt thêm chiếc bánh pizza thịt xông khói phô mai với một phần thịt xông khói sốt tỏi. Bạn quay trở lại cuộc đột kích của mình và sau 20 phút chuông cửa reo. Bạn nhận được bánh pizza. Bạn ngồi xuống trước máy tính, ăn pizza và tiếp tục cuộc đột kích của mình.

Vì vậy, sự khác biệt là gì? Một cách bạn lãng phí 20-30 phút thời gian WOW quý giá, cách khác bạn lãng phí $ 20 cộng với tiền boa.


53
Tôi cảm thấy buồn vì tôi thấy điều này thật buồn cười.
Denis Hoctor

3
Tôi phải thừa nhận rằng đây có thể là lời giải thích phi lập trình tốt nhất mà tôi đã thấy trong một thời gian dài! ví dụ tuyệt vời!
Iban Dominguez Noda

Tôi hiểu rồi và câu trả lời này giúp tôi hiểu nó, nhưng tôi muốn bánh pizza tại = / và yêu cầu sẽ không tiếp tục cho đến khi tôi nhận được bánh pizza -_-
JMASTER B

Tôi thích "Ví dụ không lập trình" !!
Cynthia Sanchez

@epascarello Mặt hài hước của nó hoạt động rất tốt !!! Chưa kể thì phải hiểu rõ ràng. Tôi cần giữ bạn cho một dự án
Omar

19

Trang của bạn được chuyển từ máy chủ đến trình duyệt máy khách, ở đâu đó trên Internet. Trình duyệt đã vẽ trang trên màn hình và ai đó - hoặc một số thứ - đang nhìn vào nó. Đó là một trò chơi chờ đợi. Mắt di chuyển qua lại, xem xét chi tiết này hoặc chi tiết đó bằng cách nhảy nhanh, lao sang một bên ngay bây giờ, rời khỏi màn hình, để điều tra sự mất tập trung trong môi trường. Đồng hồ tích tắc. Trang phát sáng một cách nhẹ nhàng, thụ động khi người dùng di chuột qua không hoạt động, tay thả lỏng trên chuột, cổ cúi xuống và mắt ngày càng có nhiều ý định vào một thứ gì đó hấp dẫn mà trang của bạn phải cung cấp.

Đột nhiên, không có bất kỳ cảnh báo nào, con trỏ bắt đầu di chuyển khi bàn tay trên chuột hơi cứng lại và bắt đầu di chuyển vết sưng bằng nhựa nhỏ trên bề mặt nhám của bàn. Khi chuột di chuyển, vật thay thế của nó trên màn hình sẽ di chuyển theo kiểu bắt chước gần giống, ghi lại những hình ảnh thú vị trong quá khứ và những nhận xét dí dỏm trong nội dung trang của bạn. Cuối cùng, một quyết định được đưa ra, chuyển động tạm dừng, một hoặc hai cơ hơi co lại và nút chuột bị ấn xuống bởi một ngón tay khăng khăng. Công tắc siêu nhỏ trên chuột kích hoạt xung điện tử, và đột nhiên trình duyệt nhận biết được điều gì đã xảy ra: một cú nhấp chuột.

Trong tất cả những điều đó, mọi thứ về những gì người dùng đã làm khi nhìn vào trang đã xảy ra theo cách hoàn toàn không thể đoán trước được đối với trình duyệt, đối với bất kỳ mã máy khách nào trong trang web của bạn, đối với bất kỳ thứ gì cư trú trên máy chủ của bạn. Không có "thời gian chờ đợi" có thể biết trước giữa các hành động của con người. Do đó, các hành động được truyền bởi thiết bị được kết nối với máy tính của người dùng, đã xảy ra khi chúng xảy ra và không theo một đồng hồ có thể đoán trước - nghĩa là chúng xảy ra không đồng bộ .


3
+1 Câu chuyện hay :) rất hấp dẫn ... nó khiến tôi phải di chuyển chuột và nhấp vào mũi tên "bỏ phiếu". Và đây lại là sự kiện không đồng bộ ....
Felix Kling

1
Ví dụ tuyệt vời, sự lựa chọn của một sự kiện trình duyệt đơn giản là tuyệt vời!
sjsam

18

Hãy nghĩ đến phần cuối của một cuộc phỏng vấn, và họ nói, "Đừng gọi cho chúng tôi, chúng tôi sẽ gọi cho bạn". Đó là bản chất của một sự kiện không đồng bộ.

Thông thường bạn xác định các hàm và bạn gọi các hàm một cách rõ ràng. Chương trình của bạn có cấu trúc bắt đầu từ dòng 1, sau đó đến dòng 2 và ngoại trừ một số mã có điều kiện và các lần lặp, gọi hàm, v.v., có cấu trúc đơn giản, lót, đồng bộ.

Nhưng trong một số trường hợp, bạn có các hành động được kích hoạt bởi các sự kiện nằm ngoài sự kiểm soát trực tiếp của chương trình, những thứ đến từ bên ngoài chương trình, như sự kiện giao diện người dùng (người dùng nhấp chuột) hoặc sự kiện mạng (ai đó cố gắng kết nối với máy chủ của bạn). Mã của bạn không trực tiếp tạo ra các sự kiện này. Chúng được tạo ra bên ngoài chương trình của bạn, thường được HĐH dựa trên việc giám sát các thiết bị giao diện người dùng và các hệ thống khác của chúng. Chúng được gọi là các sự kiện không đồng bộ.

Chỉ cần nhớ, "Đừng gọi cho chúng tôi, chúng tôi sẽ gọi cho bạn"


12

"Trong lập trình, các sự kiện không đồng bộ là những sự kiện xảy ra độc lập với luồng chương trình chính. Hành động không đồng bộ là các hành động được thực hiện trong một lược đồ không chặn, cho phép luồng chương trình chính tiếp tục xử lý."

"Với Ajax, các ứng dụng web có thể truy xuất dữ liệu từ máy chủ một cách không đồng bộ trong nền mà không can thiệp vào hiển thị và hoạt động của trang hiện có."

Khi bạn nhấp vào Chỉnh sửa và Lưu trên SO, nó đang diễn ra không đồng bộ.


12

Sự kiện không đồng bộ là sự kiện chạy bên ngoài luồng chính của ứng dụng.

Cách hiểu tốt nhất là so sánh với các sự kiện chạy đồng bộ. Ví dụ điển hình nhất sẽ là tải một trang web.

Khi bạn truy cập trang này, bạn đã nhấp vào một liên kết và đợi trang tải và không thể tương tác hoặc sử dụng trang này cho đến khi tải xong. Ngược lại, nếu trang này có sự kiện AJAX (đó là sự kiện JavaScript và XML không đồng bộ) được liên kết với một số hành động của người dùng, trang này sẽ tải một số dữ liệu từ nguồn khác một cách không đồng bộ - song song (về mặt lý thuyết) với bất kỳ hành động nào khác đang diễn ra.

Ví dụ với Hai sự kiện đồng bộ (A và B): Đầu tiên A làm một việc gì đó. Khi A kết thúc B làm một việc gì đó.

Ví dụ với Hai sự kiện không đồng bộ (A và B): Cả A và B đều làm điều gì đó cùng lúc và không sự kiện nào chờ đợi sự kiện kia.


7

Đây là một ví dụ về hoạt động không đồng bộ trong javascript (bạn cần mở bảng điều khiển javascript của mình)

console.log('One!');
setTimeout(function(){console.log('Two!');},0);
//Doesn't wait
console.log('Three!');};

//OUTPUT:
//One!
//Three!
//Two!

Lệnh gọi tới console.log('Two!')sẽ được thực hiện mà không chặn phần còn lại của mã xảy ra sau nó.

Trong một trường hợp thực tế, hãy thay thế setTimeout bằng một người nào đó nhấp vào một nút trên trang web. Phản hồi cho lần nhấp vào nút sẽ xảy ra cuối cùng mà không chặn việc thực thi mã khác như hiển thị trang.


5

Nói một cách đơn giản, nó có nghĩa là một cái gì đó xảy ra sau một khoảng thời gian không xác định, vì vậy đừng mong đợi kết quả ngay lập tức.

Ví dụ, "Mẹ ơi, con có năm đô la được không?"

Đưa tay ra xin tiền là tôi mong cô ấy đáp lại ngay bằng cách đưa tiền (đồng bộ) cho tôi.

Trên thực tế, cô ấy sẽ nhìn tôi một hoặc hai lúc, và sau đó quyết định trả lời khi cô ấy muốn (không đồng bộ).


2

Khi hai sự kiện khác nhau xảy ra riêng biệt với nhau, vì vậy bạn không thể

task1
task2

mà không cần kiểm tra rằng đã task1thực sự hoàn thành.


1

Sự kiện không đồng bộ là những sự kiện mà chúng tôi không biết khi nào nó sẽ xảy ra trong tương lai, chẳng hạn như khi máy chủ được yêu cầu cho một số tệp mà chúng tôi không biết khi nào nó sẽ thực hiện yêu cầu của chúng tôi hoặc các sự kiện giao diện người dùng mà chúng tôi không biết khi nào người dùng sẽ nhấp vào nút hoặc phần tử giao diện người dùng khác, nhưng bất chấp điều đó, những thứ khác trên trang hoặc ứng dụng đang diễn ra, nó không chặn bất kỳ điều gì nói rằng trang chuyển sang màu xám tất cả giao diện người dùng cho đến khi một số tệp từ máy chủ không đến hoặc một số sự kiện đang xảy ra, tất cả mọi thứ đều độc lập đây là sức mạnh của các sự kiện không đồng bộ, nói đơn giản là các sự kiện độc lập


0

Đồng bộ Vs. Sự kiện không đồng bộ

Một số trình xử lý sự kiện được gọi ngay lập tức khi sự kiện xảy ra. Đây được gọi là các sự kiện 'đồng bộ'. Một ví dụ là DocumentNew. Nó được gọi ngay sau khi người dùng tạo một tài liệu mới.

Tuy nhiên, một số sự kiện được gọi ngay sau khi sự kiện xảy ra, thường là sau một khoảng thời gian nhàn rỗi ngắn. Đây được gọi là các sự kiện 'không đồng bộ'. Chúng không đồng bộ vì nó sẽ làm mất ổn định Nguồn thông tin chi tiết nếu một macro do người dùng viết được gọi vào thời điểm chính xác sự kiện xảy ra.


0

Nếu mã là đồng bộ (hoặc đồng bộ), điều đó có nghĩa là mỗi đoạn mã chạy theo thứ tự, tuần tự và đoạn mã tiếp theo không thể chạy cho đến khi đoạn mã trước đó được hoàn thành. Hầu hết mã thường đồng bộ.

Nếu mã không đồng bộ (hoặc không đồng bộ ), điều đó có nghĩa là mã đó có thể chạy riêng biệt và độc lập với mã khác. Nếu có mã không đồng bộ ở giữa một loạt mã đồng bộ, trong ngữ cảnh của câu hỏi cụ thể này, mã không đồng bộ sẽ chỉ chạy khi sự kiện của nó được kích hoạt, bất kể bạn đặt nó ở đâu trong mã đồng bộ. Nó hoàn toàn tách biệt và độc lập với mã đồng bộ và chạy bất cứ khi nào sự kiện của nó yêu cầu, không chỉ khi đoạn mã trước đó được chạy xong. Một số ví dụ về điều này sẽ dành cho mã chạy trong khoảng thời gian định giờ, sau khi tệp được lưu thành công, sau khi yêu cầu web được gửi, khi người dùng nhấp vào nút hoặc sau khi tải hình ảnh.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.