一段时间以来,我一直在谷歌上搜索很多方法来了解在 nix 机器上实现异步编程/行为的各种方法,并且(如我之前所知)确认仍然没有真正的异步模式(并发使用单线程)适用于 Linux,适用于 Windows(IOCP)。
以下是 linux 的一些替代方案:
- select/poll/epoll :: 不能使用单线程完成,因为 epoll 仍然阻塞调用。此外,受监视的文件描述符必须以非阻塞模式打开。
- libaio :: 我所知道的是它的实现很糟糕,它仍然基于通知,而不是像 Windows I/O 完成端口那样基于完成。
- Boost ASIO ::它在linux下使用epoll,因此不是真正的异步模式,因为它产生了完全从用户代码中抽象出来的线程以实现前摄器设计模式
- libevent :: 如果我更喜欢 ASIO,有什么理由这样做吗?
现在问题来了:)
- 使用 epoll 编写快速可扩展网络服务器的最佳设计模式是什么(当然,这里必须使用线程:()
- 我在某处读到“只能在非阻塞模式下打开套接字”,因此 epoll 仅支持套接字,因此不能用于磁盘 I/O。上面的陈述有多真实,为什么不能使用 epoll 在磁盘 I/O 上进行异步编程?
- Boost ASIO 在 epoll 调用周围使用了一个大锁。我实际上并不了解它的含义以及如何使用 asio 本身来克服它。类似的问题
- 如何修改 ASIO 模式以使用磁盘文件?有没有推荐的设计模式?
希望有人也能用很好的解释来回答所有问题。任何指向说明 epoll 和 AIO 设计模式的实现细节的源链接也值得赞赏。