2010-01-02 31 views
8

Tôi bắt đầu sử dụng D-Bus làm cơ chế IPC cho một dự án mới trong Linux/KDE. Và tôi đã phát hiện ra rằng tài liệu không thực sự giải quyết đồng thời cả. Các dịch vụ D-Bus dự kiến ​​sẽ đối phó với nhiều cuộc gọi đồng thời đến từ các khách hàng khác nhau như thế nào? Mô hình luồng là gì? Có thể một dịch vụ giả định rằng nó là đơn luồng và D-Bus sẽ tự động xếp hàng các yêu cầu?Mô hình luồng D-Bus

Trả lời

5

Là một giao thức, D-Bus không giải quyết luồng.

Kết nối D-Bus nhận tin nhắn một cách serially. Ở cấp giao thức, trả lời thư là không đồng bộ: tức là người gửi không phải chờ trả lời trước khi gửi thêm thư.

Mặc dù về nguyên tắc, việc triển khai D-Bus có thể gửi tin nhắn đến triển khai dịch vụ đồng thời, tôi không biết bất kỳ điều nào làm điều này.

Thông thường, triển khai D-Bus (hoặc "ràng buộc", nếu bạn muốn) cho phép dịch vụ quyết định cho mỗi phương thức (hoặc thậm chí cho mỗi cuộc gọi phương thức) xem có phản hồi các cuộc gọi đến đồng bộ hay không đồng bộ. Chi tiết về điều này tùy thuộc vào việc triển khai cụ thể mà bạn đang sử dụng.

Nếu bạn đang phản hồi các cuộc gọi phương thức một cách không đồng bộ, việc triển khai dịch vụ của bạn chịu trách nhiệm đảm bảo rằng mọi trạng thái được giữ nhất quán trong khi nhiều câu trả lời đang chờ xử lý. Nếu bạn luôn trả lời đồng bộ, thì bạn biết bạn chỉ đang đối phó với một cuộc gọi phương thức tại một thời điểm.

+1

Cảm ơn. Điều này phù hợp với những gì tôi thấy trong Kubuntu bằng cách sử dụng ràng buộc Qt. Nếu tôi đặt điểm ngắt trong phương thức dịch vụ từ xa của mình (khe) và sau đó gọi nó từ hai máy khách, ứng dụng khách thứ hai đã bị chặn hoàn toàn cho đến khi mã của tôi xử lý xong thông báo đầu tiên. Nhưng tôi không chắc liệu tôi có thể dựa vào điều này không. –

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