事件库 (libevent/libuv/...) 和异步 I/O (libaio, liburing) 之间的本质区别是什么?

What is the essential difference between event library (libevent/libuv/...) and async I/O (libaio, liburing)?

提问人:PDZ 提问时间:9/13/2022 更新时间:11/16/2022 访问量:690

问:

对于高性能 I/O,通常使用一些技术:

  • poll/select/epoll/kqueue:它们是支持 I/O 多路复用的相同类型的系统调用。
  • libevent/libev/libuv:它们是跨平台的。我认为他们包装了上述系统调用并最终实现事件驱动。
  • libaio/libeio/liburing:它们提供对异步 IO 的支持。

似乎它们都可以实现高性能,libevent/libev/libuv 在易用性和跨平台性方面可能比 poll/select/epoll/kqueue 更好。但是 libevent/libev/libuv 和 libaio/libeio/liburing 似乎都非常出色,并且似乎是可以互换的。

事件库和异步 I/O 之间的本质区别是什么?在哪种情况下使用哪个更好?

谢谢。

异步 事件 IO libEvent IO-uring

评论


答:

0赞 Mascarpone 11/16/2022 #1

查看我的另一个答案: 多线程进程中的io_uring

io_uring是唯一一个可以在没有线程池的情况下进行真正的异步IO的人。