2014-09-13 273 views
5

我在看一個linux服務器程序,它爲每個客戶端創建一些共享內存,並使用消息隊列(從代碼調用的C++類)在該共享內存中發送消息來回。在它的表面上,這聽起來像域套接字一樣的使用模式 - 即有一個服務器程序發送並從客戶端收集有效載荷。unix socket vs共享內存消息更快

我的問題是 - unix域套接字做了多少額外的工作?什麼可以設想使消息隊列的共享內存比套接字快,反之亦然?

我的猜測是有一些開銷來調用發送和recv,但我不確定是什麼。我可能會嘗試做基準測試,只是在做這件事之前尋找一些見解。

回答

5

這是一個討論: UNIX Domain sockets vs Shared Memory (Mapped File)

我可以添加插槽非常簡陋,只是一個爲流套接字的字節流。這實際上可能是一個優勢 - 它傾向於使不同子系統之間的信息變得小而簡單,促進精簡接口和鬆耦合。但有時候,共享內存是非常有用的。我在一個C++ Linux後端的共享內存中使用了數據密集型的Google Maps應用程序 - 該數據庫在共享內存中只有很大的(1千兆字節)png柵格。