什么是更好的做法,创建一个具有多个连接的 unix 套接字或一个连接的多个套接字?

What is better practice, create one unix socket with multiple connections or multiple sockets with one connection?

我正在设计一个程序,该程序将使用 exec 创建多个进程,然后使用套接字创建到它们的连接,我有多种选择,但我不知道哪个是更好。

每个 child 进程将有大约 3 个服务要与服务器通信。

  1. 我是否应该创建 3 个套接字并将每个 child 连接到这些套接字,并在连接开始时区分它们发送 ID /temp/service{1|2|3}.sock
  2. 我应该为每个 child /temp/{ID}/service{1|2|3}.sock 创建 3 个新套接字吗?

第二个选项似乎好一点,因为我不必在连接开始时告诉服务器我是谁,它隐含在套接字的名称中,每个服务都有自己的套接字,但我不知道不知道为每个 child.

创建 3 个套接字是否效率低下

有趣的问题。以下是我对此的看法:

(围绕选项 1)

如果您有大量流量流经这些套接字,那么在某些时候它们可能会成为瓶颈。如果不是这种情况(低流量),则选项 1 可行。

(围绕选项 2)

令 N 为在给定时间范围内创建的子进程数。如果 N * 3 >(您机器上的文件描述符总数),对于相同的时间范围,那么选项 2 显然不合适。

如果您还可以考虑文件描述符回收率,则整体评估会更加准确。

(总体)

我会考虑这两个权衡并据此做出决定。如果没有一些数字,就很难做出明智的决定。