我正在尝试理解C++中的异步模型。我正在研究4个旨在处理异步I/O的库:
这些库有大量的重叠。
执行上下文和io_uring
异步I/O的未来可能会在Linux机器上使用io_uring。liburing的存在是为了提供io_uring与服务的接口。然而,libunifex也提供上下文。它们都显式使用io_uring,但用法类似于Boost.Asio的上下文和CppCoro的服务。
liburing的io_service、libunifex的io_uring_context Boost.Asio的io_context和CppCoro的io_service都可以一起使用吗?如果我的代码包含了所有四个库,那么每个库都会有一个执行上下文吗?
功能:打开文件
这一节包含一个CppCoro如何异步打开文件的示例。我相信此模板类将在Boost.Asio中用于异步文件访问。libunifex有一个包含异步写入文件的io_uring_text.cpp 文档。显然,存在用于异步写入文件的liburing。
我应该只使用io_uring特定的库来访问文件吗?
功能:联网
众所周知,Boost.Asio提供网络功能。CppCoro也是。liburing包括一个使用低级别C代码的示例回波服务器。
Linbunifex似乎不包括直接网络功能。我认为它应该与其他网络库结合起来。我会把它和上面三个库中的一个结合起来,给一个旧的库一个发送者-接收者界面吗?我该怎么做?
接口:协同线
我猜协同线应该是让这些库一起存在的粘合剂。Boost.Asio与协同器兼容。liburing4cpp和libunifex的核心特性是协同系统兼容性。另一方面,CppCoro本质上是一个协同库。
讨论使用协同剂作为胶水有意义吗?我是否可以说“我将使用库A实现异步函数,使用库B处理异步函数的输出”?
我的问题
你希望看到有人同时使用所有4个库吗?这些库中的任何一个应该在其他库的基础上使用吗?
在功能重叠的情况下,这些库在性能上如何比较?Boost.Asio是否落后于新的异步模型?Boost.Asio是否通过集成最新的异步模型来保持领先地位?liburing4cpp包括一个低级别的回显服务器,它与Boost.Asio的现代接口不太相提并论。基于低级别io_uring使用率的应用程序与使用Boost.Asio构建的应用程序相比如何?
我认为libunifex中的发送者/接收者主要是作为一个接口。我是否应该使用它作为与其他库(例如Boost.Asio )的接口?
发布于 2022-07-26 19:46:19
看看asio-grpc,我认为他们在示例中几乎包含了您的所有比较。
https://stackoverflow.com/questions/73128677
复制相似问题