Do other operating systems implement the Linux sys

2019-04-29 20:37发布

In an application I am developing I use splice on Linux for socket-to-socket data transfer.

  1. Do other operating systems (specifically at least Windows, OS X and FreeBSD) implement splice or an equivalent solution?
  2. Is it possible to imitate socket-to-socket data spliceing on Windows with sendfile¹ + memmap¹?

¹ Both exist on Windows under different names which I do not remember.


Update

You can see the performance improvements of splice vs user space buffers on Linux.

go

  • DF, DR, F, MF, MR are my application in its different tunneling modes, NX is NGINX web server
  • -p+t uses the Linux system call splice
  • +p-t uses a portable implementation with user space buffers
  • +p+t uses a portable implementation with user space buffers and multiple OS threads
  • bars represent throughput in gigaBYTE s per second
  • a single 1 gigabyte (1048576000 bytes) file was requsted 4 times by 4 concurrent clients

2条回答
叛逆
2楼-- · 2019-04-29 21:15
相关推荐>>
3楼-- · 2019-04-29 21:17

TransmitFile comes to mind as one such way in winsock to stream from one file handle to a socket, but I an not certain if that will help you as it's for streaming from file->disk. You might be able to use it with a memory mapped file handle.

I've heard a few people in the past speak of "kernel mode" as the way to speed up some echo and simple server operations, but I've never done it.

Some links on kernel mode winsock:

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

查看更多
登录 后发表回答