我有两个 C++ 服务需要通过网络进行超低延迟通信。我正在考虑使用带有
io_uring
的原始套接字,但也在考虑使用各种消息队列(如 ZeroMQ、NanoMQ 和 Aeron UDP 等)的可能性。
io_uring
的原始套接字的延迟和性能与 ZeroMQ、NanoMQ 和 Aeron UDP 相比如何?io_uring
的原始套接字增加的复杂性值得吗?io_uring
实现原始套接字的示例代码示例?到目前为止我发现的一些代码示例就是这样:https://unixism.net/loti/tutorial/webserver_liburing.html
但是它的http服务器和客户端,我可能不需要http作为应用程序协议。
任何见解或基准将不胜感激。谢谢!
Aeron 从一开始就专注于低延迟和高吞吐量。它的性能通常比其他消息传递技术好几个数量级。 Aeron 通常只会使套接字等原始传输的 RTT 增加 1-2 微秒。 Aeron 可以通过作为高级产品的内核旁路扩展来实现更低的延迟,例如用于云的 DPDK、用于 Solarflare 的 ef_vi 以及用于 Mellanox 网卡的 VMA Express。相同的 API 可用于覆盖 UDP 多播、UDP 单播和共享内存上的 IPC。与其他 UDP 消息传递不同,Aeron 具有内置的流量和拥塞控制功能,非常可靠。