Aru*_*nmu 16 c c++ epoll aio boost-asio
一段时间以来,我一直在谷歌上搜索有关在nix机器上实现异步编程/行为的各种方法,并且(正如我之前所知)已经确认仍然没有TRULY异步模式(并发)使用单线程)Linux适用于Windows(IOCP).
以下是linux提供的几种替代方案:
现在问题来了:)
希望有人能够用很好的解释回答所有问题.任何链接到源,其中epoll和AIO设计模式的实现细节是开辟的也是赞赏.
Sam*_*ler 12
提升ASIO ::它在linux下使用epoll,因此不是真正的异步模式,因为它产生的线程完全从用户代码中抽象出来以实现proactor设计模式
这是不正确的.Asio库epoll()默认使用最新的Linux内核版本.但是,线程调用io_service::run()将根据需要调用回调处理程序.在Asio库中只有一个位置用于模拟异步接口,在文档中有详细描述:
每个io_service的附加线程用于模拟异步主机解析.该线程是在第一次调用
ip::tcp::resolver::async_resolve()或 创建时创建的ip::udp::resolver::async_resolve().
这并不会使您所声称的库"不是真正的异步模式",实际上它的名称根据定义不同意您的意思.
1)使用epoll编写快速可扩展网络服务器的最佳设计模式是什么(当然,这里必须使用线程:()
我建议使用Boost Asio,它使用proactor设计模式.
3)Boost ASIO围绕epoll呼叫使用一个大锁.我实际上并没有理解它的含义是什么以及如何使用asio本身克服它
epoll反应器使用互斥锁来发送处理程序,但实际上这对大多数应用程序来说并不是一个大问题.有一些特定于应用程序的方法可以缓解此行为,例如io_service每个CPU可以利用数据位置.请参阅我对此主题的类似问题的回答.它也经常在Asio邮件列表上讨论.
4)如何修改ASIO模式以使用磁盘文件?有没有推荐的设计模式?
如您所述,Asio库本身不支持文件I/O. 有几次尝试将它添加到库中,我建议在邮件列表上讨论.
| 归档时间: |
|
| 查看次数: |
5977 次 |
| 最近记录: |