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