C++ 中的低延迟通信:使用 io_uring 的原始套接字与 ZeroMQ、NanoMQ、Aeron 等

问题描述 投票:0回答:1

我有两个 C++ 服务需要通过网络进行超低延迟通信。我正在考虑使用带有

io_uring
的原始套接字,但也在考虑使用各种消息队列(如 ZeroMQ、NanoMQ 和 Aeron UDP 等)的可能性。

我的问题:

  1. 使用
    io_uring
    的原始套接字的延迟和性能与 ZeroMQ、NanoMQ 和 Aeron UDP 相比如何?
  2. 与高级库的简单性相比,使用
    io_uring
    的原始套接字增加的复杂性值得吗?
  3. 您能否提供使用
    io_uring
    实现原始套接字的示例代码示例?

到目前为止我发现的一些代码示例就是这样:https://unixism.net/loti/tutorial/webserver_liburing.html

但是它的http服务器和客户端,我可能不需要http作为应用程序协议。

任何见解或基准将不胜感激。谢谢!

c++ performance sockets networking
1个回答
0
投票

Aeron 从一开始就专注于低延迟和高吞吐量。它的性能通常比其他消息传递技术好几个数量级。 Aeron 通常只会使套接字等原始传输的 RTT 增加 1-2 微秒。 Aeron 可以通过作为高级产品的内核旁路扩展来实现更低的延迟,例如用于云的 DPDK、用于 Solarflare 的 ef_vi 以及用于 Mellanox 网卡的 VMA Express。相同的 API 可用于覆盖 UDP 多播、UDP 单播和共享内存上的 IPC。与其他 UDP 消息传递不同,Aeron 具有内置的流量和拥塞控制功能,非常可靠。

© www.soinside.com 2019 - 2024. All rights reserved.