我正在研究一个linux服务器程序,它为每个客户端创建一些共享内存,并使用该共享内存中的消息队列(从代码调用的C ++类)来回发送消息。从表面上看,这听起来像是与域套接字相同的使用模式 - 即有一个服务器程序可以从其客户端发送和重新获取有效负载。
我的问题是 - unix域套接字有哪些额外的工作要做?可以想象,使用消息队列的共享内存比套接字更快,反之亦然?
我的猜测是调用send和recv会有一些开销,但我不确定是什么。我可能会尝试对此进行基准测试,只是在我做这个之前寻找一些见解。
答案 0 :(得分:5)
以下是一个讨论: UNIX Domain sockets vs Shared Memory (Mapped File)
我可以补充一点,套接字是非常原始的,只是流套接字的字节流。这实际上可能是一个优势 - 它倾向于使不同子系统之间的消息变得小而简单,促进精益接口和松散耦合。但有时,共享内存非常有用。我在C ++ Linux后端使用共享内存到数据密集型Google Maps应用程序 - 数据库在共享内存中只是巨大的(+1千兆字节)png栅格。