2010-03-09 48 views

Trả lời

21

"Chặn" có nghĩa là người gọi đợi cho đến khi callee kết thúc quá trình xử lý. Ví dụ, một "chặn đọc" từ một ổ cắm chờ đợi cho đến khi có dữ liệu để trở về; một "không chặn" đọc không, nó chỉ trả về một dấu hiệu (thường là một số) cho dù có cái gì đó đọc.

Bạn nghe cụm từ chủ yếu xung quanh các API truy cập tài nguyên không nhất thiết yêu cầu sự chú ý của CPU - ví dụ: I/O. Một cuộc gọi từ Chủ đề A đến Chủ đề B có thể được thiết kế để "chặn" (giữ chủ đề A) cho đến khi Chủ đề B đạt được trạng thái có liên quan để xử lý hoặc ít nhất chấp nhận yêu cầu. (Ví dụ rõ ràng nhất có "tham gia", thường có nghĩa là "Tôi, Chủ đề A, muốn đợi cho đến khi Chủ đề B chấm dứt" - bạn sử dụng điều đó khi thoát khỏi chương trình đa luồng.)

+3

điều này khác với đồng bộ/không đồng bộ như thế nào? – alfredo

+1

@Jackie: Không * rất nhiều * nhưng có sự khác biệt. Thông thường, bạn sẽ thấy cụm từ "chặn" xung quanh cuộc gọi sẽ trả về dữ liệu (hoặc bạn có) như một phần của cuộc gọi đó (ví dụ đọc socket của tôi; nó chờ [chặn] hoặc không [không chặn] nhưng bạn nhận được dữ liệu - hoặc không - như một hiệu ứng tức thời của cuộc gọi), trong khi bạn nghe "không đồng bộ" xung quanh một mô hình yêu cầu-sau-kiểm tra lại (hoặc nhận được gọi lại). Nhưng chúng là những khái niệm liên quan chặt chẽ. Tôi đoán bạn nghe "chặn" xung quanh những thứ được * đã * không đồng bộ theo một cách nào đó (mạng comms, ví dụ lặp lại của tôi) nhiều hơn không. –

+3

Nó có vẻ như không chặn là cho truyền thông không đồng bộ và chặn là truyền thông đồng bộ, nhưng điều đó không hoàn toàn đúng. Mã đồng bộ có thể sử dụng các cuộc gọi không chặn (ví dụ như trong vòng lặp, mặc dù nó không thực tế) và mã không đồng bộ thường sử dụng các cuộc gọi chặn (đầu tiên lấy thông tin nếu và kết nối nào cần chú ý, sau đó gọi chức năng 'chặn', đã biết nó sẽ không chặn). –

3

Nói cách đơn giản : Nếu bạn gọi chức năng dừng chương trình tiếp tục chạy cho đến khi người dùng thực hiện một số hành động (hoặc một số hành động khác mà chương trình của bạn không kiểm soát), cuộc gọi này được gọi là cuộc gọi chặn.

+2

điều này khác với đồng bộ/không đồng bộ như thế nào? – alfredo

Các vấn đề liên quan