Linux 中是否有异步版本的 sendfile?
Is there an asynchronous version of sendfile in Linux?
io_getevents
通知机制乍一看非常强大,所以我想要一些我可以使用它的东西。我只是找不到任何东西。在 Windows 上很简单:只有 TransmitFile
可以异步工作(重叠),如果需要,还可以使用一些通知机制(IOCP、事件)。 Linux 上一定有一些等价物,对吧?或者,在某些情况下提出我的问题,我将如何在 Linux?
上创建一个高效的文件服务器
唉,在 Linux 上没有什么容易的事,几乎任何事情都可能在错误的情况下被阻止 (even io_submit
)。回答您的问题(在标题和正文中):
- (2019) Linux 中没有系统提供
sendfile
的异步版本(Linux 不是 Windows 或 FreeBSD)。有一个很好的 write-up 覆盖 sendfile
blocking, caveats and ideas in a TANK distributed log issue. That notes lighttpd came up with an "asynchronous" sendfile
hack 但它很复杂并且使用线程。
- 与 Windows 相比,在 Linux 上创建高效的文件服务器需要不同的思维方式。查看 this NGINX blog post about what they do to make things fast on Linux or this Scylla blog post about different I/O access methods for Linux 以了解所涉及的权衡。
休息时间...
未来(2020+)解决方案
有人建议某些未来的 Linux 内核(晚于 5.5,在撰写本文时已经达到 5.5-rc7)基本上可以执行 asynchronous sendfile via io_uring if io_uring gains support for splice()
...
io_getevents
通知机制乍一看非常强大,所以我想要一些我可以使用它的东西。我只是找不到任何东西。在 Windows 上很简单:只有 TransmitFile
可以异步工作(重叠),如果需要,还可以使用一些通知机制(IOCP、事件)。 Linux 上一定有一些等价物,对吧?或者,在某些情况下提出我的问题,我将如何在 Linux?
唉,在 Linux 上没有什么容易的事,几乎任何事情都可能在错误的情况下被阻止 (even io_submit
)。回答您的问题(在标题和正文中):
- (2019) Linux 中没有系统提供
sendfile
的异步版本(Linux 不是 Windows 或 FreeBSD)。有一个很好的 write-up 覆盖sendfile
blocking, caveats and ideas in a TANK distributed log issue. That notes lighttpd came up with an "asynchronous"sendfile
hack 但它很复杂并且使用线程。 - 与 Windows 相比,在 Linux 上创建高效的文件服务器需要不同的思维方式。查看 this NGINX blog post about what they do to make things fast on Linux or this Scylla blog post about different I/O access methods for Linux 以了解所涉及的权衡。
休息时间...
未来(2020+)解决方案
有人建议某些未来的 Linux 内核(晚于 5.5,在撰写本文时已经达到 5.5-rc7)基本上可以执行 asynchronous sendfile via io_uring if io_uring gains support for splice()
...