我的问题是关于在Linux上使用Python进行套接字编程,但由于Python的socket模块只是对系统调用(recv、recvfrom等)的包装器,因此它与Python没有太大关系。
因此,根据docs,当我们调用recv方法时,
“为了与硬件和网络实际情况最佳匹配,bufsize的值应该是相对较小的2的幂,例如4096”
这是什么意思?
“与硬件和网络实际情况最佳匹配”
我最关心的是性能。
如果我将自定义缓冲区(稍后在我的代码中用作数据容器,如果有必要,它只是一个内存视图)传递给socket.recv_into方法,而缓冲区大小不是2的幂次方,那么它会成为我的网络软件瓶颈吗?
因此,根据docs,当我们调用recv方法时,
“为了与硬件和网络实际情况最佳匹配,bufsize的值应该是相对较小的2的幂,例如4096”
这是什么意思?
“与硬件和网络实际情况最佳匹配”
我最关心的是性能。
如果我将自定义缓冲区(稍后在我的代码中用作数据容器,如果有必要,它只是一个内存视图)传递给socket.recv_into方法,而缓冲区大小不是2的幂次方,那么它会成为我的网络软件瓶颈吗?
这只需要一行清晰简短的代码。
但我的缓冲区大小可能是17或51或其他值,所以我在思考,是否应该实现一些内部类似环形缓冲区的东西,其大小“好”(比如4096),并使用它以这样的“好”大小分块读取数据从套接字中,并将其写入那里,然后复制到我的缓冲区中?
从性能的角度来看,这样做有意义吗?
还是我的当前方案(当我以“不好”的大小读取数据时,它不符合“2的幂”规则)是可以的?
换句话说:如果我们以1023的大小而不是1024的大小分块从套接字中读取数据,这会影响性能吗?