什么是更好的做法,创建一个具有多个连接的 unix 套接字或一个连接的多个套接字?
What is better practice, create one unix socket with multiple connections or multiple sockets with one connection?
我正在设计一个程序,该程序将使用 exec
创建多个进程,然后使用套接字创建到它们的连接,我有多种选择,但我不知道哪个是更好。
每个 child 进程将有大约 3 个服务要与服务器通信。
- 我是否应该创建 3 个套接字并将每个 child 连接到这些套接字,并在连接开始时区分它们发送
ID
/temp/service{1|2|3}.sock
。
- 我应该为每个 child
/temp/{ID}/service{1|2|3}.sock
创建 3 个新套接字吗?
第二个选项似乎好一点,因为我不必在连接开始时告诉服务器我是谁,它隐含在套接字的名称中,每个服务都有自己的套接字,但我不知道不知道为每个 child.
创建 3 个套接字是否效率低下
有趣的问题。以下是我对此的看法:
(围绕选项 1)
如果您有大量流量流经这些套接字,那么在某些时候它们可能会成为瓶颈。如果不是这种情况(低流量),则选项 1 可行。
(围绕选项 2)
令 N 为在给定时间范围内创建的子进程数。如果 N * 3 >(您机器上的文件描述符总数),对于相同的时间范围,那么选项 2 显然不合适。
如果您还可以考虑文件描述符回收率,则整体评估会更加准确。
(总体)
我会考虑这两个权衡并据此做出决定。如果没有一些数字,就很难做出明智的决定。
我正在设计一个程序,该程序将使用 exec
创建多个进程,然后使用套接字创建到它们的连接,我有多种选择,但我不知道哪个是更好。
每个 child 进程将有大约 3 个服务要与服务器通信。
- 我是否应该创建 3 个套接字并将每个 child 连接到这些套接字,并在连接开始时区分它们发送
ID
/temp/service{1|2|3}.sock
。 - 我应该为每个 child
/temp/{ID}/service{1|2|3}.sock
创建 3 个新套接字吗?
第二个选项似乎好一点,因为我不必在连接开始时告诉服务器我是谁,它隐含在套接字的名称中,每个服务都有自己的套接字,但我不知道不知道为每个 child.
创建 3 个套接字是否效率低下有趣的问题。以下是我对此的看法:
(围绕选项 1)
如果您有大量流量流经这些套接字,那么在某些时候它们可能会成为瓶颈。如果不是这种情况(低流量),则选项 1 可行。
(围绕选项 2)
令 N 为在给定时间范围内创建的子进程数。如果 N * 3 >(您机器上的文件描述符总数),对于相同的时间范围,那么选项 2 显然不合适。
如果您还可以考虑文件描述符回收率,则整体评估会更加准确。
(总体)
我会考虑这两个权衡并据此做出决定。如果没有一些数字,就很难做出明智的决定。