gpt4 book ai didi

c - 通过单个发送调用发送的合理数据量

转载 作者:太空宇宙 更新时间:2023-11-04 03:45:40 24 4
gpt4 key购买 nike

我需要通过 TCP 套接字向其他客户端发送不同大小的文件。现在我想知道一次发送函数调用多少数据是合理的?

例如,我不会通过 1 次发送调用发送一整张 2 兆字节的图片 - 我会将该文件分割成更小的缓冲区,然后一个接一个地发送它们。但是这些缓冲区应该多大或多小呢?我知道发送并不能保证发送我的所有数据 - 我会检查一下。

最佳答案

这并不重要,只要您发送的缓冲区大于 MTU(通常略低于 1500 字节左右)即可。如果您发送的缓冲区大于 MTU,操作系统或 NIC 会将您的数据包分割成 MTU 大小的数据包,您无需担心自己进行分割。发生这种情况时,操作系统将阻塞对 send() 的调用,直到所有数据都已发送或发生错误 — 如果需要,您可以在一次调用中发送所有 2 MB,它赢了不会有问题。

与仅大于 MTU 的调用相比,如果仅由于缓存效果(即,由于数据并非全部适合 L2 缓存,您将有更多的缓存未命中),您的性能可能会稍微差一些),但这不太可能很重要。

不过,对于文件传输,如果使用 TransmitFile(),您实际上会获得更好的性能。函数,而不是手动将数据从文件读取到缓冲区然后发送。该函数针对文件传输进行了高度优化,因为它可以将文件数据直接从文件系统直接传输到 NIC 上,而无需将其从内核空间复制到用户空间,然后再复制回内核空间。这称为 zero-copy operation .

关于c - 通过单个发送调用发送的合理数据量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24761995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com