我有一个连接到 NFS 服务器并写入数据的客户端。它是一个多进程应用程序,可以创建与进程一样多的 TCP 连接。问题是,如果我尝试一个进程,写入时的套接字阻塞很少(即 poll() 不会暂停)。如果我将进程数增加到 8 个或更多,我会发现自己在大约 30% 的时间里被每个套接字上的 poll() 阻塞。使用具有独立发送/接收缓冲区的多个 TCP 流的目的不是这样,所以它们不应该像这样阻塞吗?为什么有多个流相互干扰?链接远未达到饱和(用 iperf 测试)。
我对此的想法是 NFS 服务器将为每个 TCP 连接创建一个套接字,并且它们将有自己的接收缓冲区。我知道我正在为每个进程创建单独的 TCP 套接字,所以它们应该有自己的发送缓冲区。如果我没有使链接饱和,为什么套接字会阻塞?