Đây là một câu hỏi thú vị.
Lập trình không đồng bộ là một mô hình lập trình chủ yếu là luồng đơn, tức là "sau một chuỗi thực hiện liên tục".
Bạn tham khảo javascript, vì vậy hãy thảo luận về ngôn ngữ đó, trong môi trường của trình duyệt web. Một trình duyệt web chạy một luồng thực thi javascript trong mỗi cửa sổ, nó xử lý các sự kiện (như onclick = "someFunction()") và các kết nối mạng (chẳng hạn như các cuộc gọi xmlhttprequest).
<script>
function performRequest() {
xmlhttp.open("GET", "someurl", true);
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
alert(xmlhttp.responseText);
}
}
xmlhttp.send(sometext);
}
</script>
<span onclick="performRequest()">perform request</span>
(Đây là ví dụ không hoạt động để chỉ trình bày khái niệm).
Để làm mọi thứ theo cách không đồng bộ, chuỗi điều khiển có thứ được gọi là 'vòng lặp chính'. Vòng lặp chính trông giống như sau:
while (true) {
event = nextEvent(all_event_sources);
handler = findEventHandler(event);
handler(event);
}
Điều quan trọng cần lưu ý đây không phải là 'vòng lặp bận'. Đây là loại giống như một chủ đề ngủ, chờ đợi cho hoạt động xảy ra. Hoạt động có thể được nhập từ người dùng (Chuyển động chuột, Nút bấm, Nhập) hoặc nó có thể là hoạt động mạng (Phản hồi từ máy chủ).
Vì vậy, trong ví dụ trên,
- Khi người dùng nhấp vào nhịp, một sự kiện buttonClicked sẽ được tạo ra, findEventHandler() sẽ tìm thấy những sự kiện onclick trên thẻ span, và sau đó xử lý đó sẽ là được gọi với sự kiện này.
- Khi yêu cầu xmlhttp được tạo, nó được thêm vào danh sách nguồn sự kiện all_event_sources.
- Sau khi hàm performRequest() trả về, vòng lặp chính đang chờ ở bước tiếp theo() chờ đợi phản hồi. Tại thời điểm này không có gì 'chặn' các sự kiện tiếp tục được xử lý.
- Dữ liệu trở lại từ máy chủ từ xa, nextEvent() trả về sự kiện mạng, trình xử lý sự kiện được tìm thấy là phương thức onreadystatechange(), phương thức đó được gọi và hộp thoại alert() kích hoạt.
Cần lưu ý rằng alert() là hộp thoại chặn. Khi hộp thoại đó xuất hiện, không thể xử lý thêm sự kiện nào nữa. Đó là một lập dị của mô hình javascript của các trang web mà chúng tôi có một phương pháp sẵn sàng có sẵn mà sẽ chặn thực hiện thêm trong bối cảnh của trang đó.
đề nghị chỉnh sửa câu trả lời "Thật đáng giá" khác với "nó đáng giá" mà tôi nghĩ là ý định của bạn. Chỉ để tránh nhầm lẫn cho độc giả – MadMurf
@MadMurf: Tôi cũng nhận thấy điều đó .... và sửa nó. – mpen
>> Lập trình không đồng bộ là một mô hình lập trình chủ yếu là luồng đơn << - Không cố gắng để trở thành người theo dõi ở đây, nhưng tôi không thấy câu này đúng như thế nào. Có lập trình không đồng bộ ngụ ý bất cứ điều gì về chủ đề, hãy để một mình so vs nhiều? – Lee