要在Python中从套接字读取数据,您需要调用
这不仅适用于Python,但由于我特别提到了Python文档,因此我会标记它。
socket.recv
函数,该函数的签名如下:
python docs for socket.recv模糊地说明:
socket.recv(bufsize[, flags])
问题:“与硬件和网络实际情况最佳匹配”是什么意思?将bufsize设置为非2的幂的实际影响是什么?注意:为了与硬件和网络实际情况最佳匹配,bufsize的值应该是相对较小的2的幂,例如4096。
我看到许多 其他 建议,使得这个读取长度成为2的幂次方。我也很清楚,在许多情况下,将数组长度设置为2的幂次方是有用的(在长度上进行位移/掩码操作,最优FFT数组大小等),但这些是应用程序相关的。我只是没有看到使用socket.recv
时的一般原因。当然不足以成为Python文档中的具体建议。我也没有看到任何2的幂次方优化在底层Python代码中,使其成为Python特定的建议。
这不仅适用于Python,但由于我特别提到了Python文档,因此我会标记它。
更新:我刚刚检查了内核级别上缓冲区的大小(或者至少我认为我检查了...我运行了cat /proc/sys/net/core/rmem_default
),它是124928,不是2的幂。 rmem_max
是131071,同样明显不是2的幂。
在更深入地研究后,我真的看不出2的幂推荐有什么好处。我准备把它称为虚假建议...
我还添加了tcp
和C
标签,因为它们也相关。
recv()
,这些答案可能有助于更全面地理解。它不会回答问题,但会提供一些更深入的见解。 - extraneon