在我正在开发的应用程序中我使用splice http://en.wikipedia.org/wiki/Splice_%28system_call%29在 Linux 上用于套接字到套接字的数据传输。
- 其他操作系统(特别是至少 Windows、OS X 和 FreeBSD)是否实现
splice
或等效的解决方案?
- 是否可以模拟套接字到套接字的数据
splice
在 Windows 上使用sendfile
¹ + memmap
¹?
¹ 两者都以不同的名称存在于 Windows 上,我不记得了。
Update
你可以看到性能的提升splice
与 Linux 上的用户空间缓冲区相比。
-
DF
, DR
, F
, MF
, MR
我的应用程序有不同的隧道模式,NX
是 NGINX 网络服务器
-
-p+t
使用Linux系统调用splice
-
+p-t
使用带有用户空间缓冲区的可移植实现
-
+p+t
使用具有用户空间缓冲区和多个操作系统线程的可移植实现
- 条形代表吞吐量gigaBYTE秒每秒
- 4 个并发客户端请求 4 次单个 1 GB(1048576000 字节)文件
传输文件 http://msdn.microsoft.com/en-us/library/windows/desktop/ms740565%28v=vs.85%29.aspx我想到了winsock中从一个文件句柄流式传输到套接字的一种方式,但我不确定这是否会对您有所帮助,因为它是从文件->磁盘流式传输。您也许可以将它与内存映射文件 http://msdn.microsoft.com/en-us/library/windows/desktop/ms684212%28v=vs.85%29.aspx handle.
我过去听过一些人谈论“内核模式”作为加速某些回显和简单服务器操作的方法,但我从未这样做过。
关于内核模式winsock的一些链接:
http://blogs.msdn.com/b/wndp/archive/2006/02/24/introduction-to-winsock-kernel-wsk.aspx http://blogs.msdn.com/b/wndp/archive/2006/02/24/introduction-to-winsock-kernel-wsk.aspx
http://msdn.microsoft.com/en-us/library/windows/hardware/ff571084(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/hardware/ff571084(v=vs.85).aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)