对于高性能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_uring
io_uring是唯一一个可以在没有线程池的情况下实现真正异步io的人。