Linux 是否有任何本机内核工具可以将提供的缓冲区发送()到一组套接字?一种向量 I/O,除了套接字句柄而不是缓冲区。
目标是减少在某些情况下涉及的 u/k 转换的数量,例如,您需要向 n 个客户端广播一些状态更新,这需要迭代每个套接字并发送。
一项限制是必须支持 TCP 套接字(不受我的控制)
答案是否定的,linux和posix系统都没有你想要的调用。我担心您不会获得任何优势,因为每个数据流都将遵循不同的路径,这使得在内核中复制缓冲区而不是在用户空间中复制缓冲区。不在用户到内核中进行复制并不一定意味着在内核模式下进行更好。
不管怎样,在Linux中你可以实现这种mwrite(或msend)系统调用,因为你有源代码。但恐怕你除了头痛之外什么也得不到。此实现的唯一方法是某种转移时复制方法,但我认为您不会获得任何优势。
最后,一旦你完成了第一个write(2)调用时,下一次必须再次交换用户缓冲区的概率太低,使得缓冲区的第二个和下一个副本的开销非常低,因为页面将全部位于核心内存中。您需要一个非常高负载的系统才能在系统调用之间交换用户缓冲区。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)