oracle recv buf size,用bufsize而不是2的幂调用socket.recv的实际影响是什么?

博客探讨了在Python中使用socket.recv时,为何建议将bufsize设置为2的幂次方。尽管这在某些应用中可能有助于优化,但博主发现系统内核级别的缓冲区大小并不总是遵循这一规则。博主怀疑这是一个误导性的建议,并考虑其实际影响可能并不显著。讨论涉及网络协议、数据包处理和潜在的性能优化。
摘要由CSDN通过智能技术生成

要从python中的套接字读取数据,请调用socket.recv,它具有以下签名:

socket.recv(bufsize[, flags])

注意: 为了与硬件和网络实际情况保持最佳匹配,bufsize的值应为2的较小乘方,例如4096。

问题 :“ 与硬件和网络现实最匹配 ”是什么意思?将bufsize设置为非2的幂次方有什么 实际 影响?

我已经看到许多其他

建议,以使其读数为2的幂。我也很清楚为什么将数组长度设为2的幂通常很有用的原因(长度的位移位/掩码操作,最佳FFT数组大小,等等),但它们取决于应用程序。我只是没有看到使用它的一般原因socket.recv。当然不是python文档中特定建议的重点。我也没有在基础python代码中看到任何二次幂优化来使其成为特定于python的建议

例如…如果您有一个协议,其中确切知道传入的数据包长度,则最好仅“最多”读取要处理的数据包所需的内容,否则可能会吞噬下一个数据包那会很烦人。如果我当前正在处理的数据包只有42个字节待处理,那么我只会将bufsize设置为42。

我想念什么?当我必须选择一个任意的缓冲区/数组大小时,通常(总是?)将长度乘以2的幂,以防万一。这只是多年以来养成的习惯。python文档也是习惯的受害者吗?

这不是python独有的,但是由于我专门引用python文档,因此将其标记为python。

更新 :我只是在系统的内核级别上检查了缓冲区的大小(或者至少我认为我做了…我做了cat

/proc/sys/net/core/rmem_default),它是124928。不是2的幂。 rmem_max是131071,显然也不是2的幂。

在深入研究这一点时,我真的看不到两项建议的作用。我准备将其称为虚假推荐…

我还添加了tcp和C标签,因为它们也很重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值