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

问题描述

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

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

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

enter image description here

第二个选项似乎更好一些,因为我不必在连接开始时告诉服务器我是谁,它隐含在套接字的名称中,每个服务都有自己的套接字但我没有知道为每个孩子创建 3 个套接字是否效率低下。

解决方法

有趣的问题。以下是我的想法:

(围绕选项 1)

如果您有大量流量通过这些套接字,那么在某些时候它们可能会成为瓶颈。如果情况并非如此(低流量),则选项 1 会起作用。

(围绕选项 2)

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

如果您还可以考虑文件描述符回收率,那么整体评估的准确性会更高。

(总体)

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