我正在编写一个涉及在两个进程之间传递文件描述符的应用程序。我正在使用unix域套接字'sendmsg()
和recvmsg()
来做同样的事情,将FD作为辅助数据传递。
我在测试中发现,连接模式sendmsg()
套接字的SOCK_SEQPACKET
性能优于无连接SOCK_DGRAM
套接字的性能。这背后的原因是什么?
这就是我测试代码的方式。客户端程序是使用epoll
的事件循环,它在FD上执行recvmsg()
并立即关闭收到的FD,非常直接。
在服务器端,我有多个线程在客户端对这个单独的FD执行sendmsg()
。我尝试了多个线程组合,每个线程没有sendmsg()
个调用等,但连接模式套接字的sendmsg()
比它的无连接套接字计数器部分要快。
我能想到的唯一原因是内核可能必须通过套接字路径名来查找客户端FD,这涉及一些文件系统调用?