与 io_uring 复用

Multiplexing with io_uring

我最近使用 epoll 编写了一个简单的 TCP 服务器,但我想探索其他高性能多路复用机制,为此我遇到了 io_uring,并计划制作另一个简单的 TCP 服务器使用它。

但是我读到 io_uring 的条目数在这里被限制为 4096 https://kernel.dk/io_uring.pdf,这似乎意味着我理论上无法拥有超过该数量的条目持久连接。

据我了解,通常我会在什么地方使用 epoll_wait() 之类的东西来等待 epoll 事件,我改为在 io_uring 中提交特定请求,并在请求有 completed/failed,这是否意味着我最多可以提交 4096 个 read() 请求?

我是否误解了 io_uring 的用例或我是否误解了如何使用它?

在我链接的同一文档中,它说:

Normally an application would ask for a ring of a given size, and the assumption may be that this size corresponds directly to how many requests the application can have pending in the kernel. However, since the sqe lifetime is only that of the actual submission of it, it's possible for the application to drive a higher pending request count than the SQ ring size would indicate.

这正是您在大量套接字上侦听消息的情况下要做的 - 只是您一次可以发送的提交数量的上限是 4096。