首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Boost.Asio、libunifex、liburing和CppCoro的比较

Boost.Asio、libunifex、liburing和CppCoro的比较
EN

Stack Overflow用户
提问于 2022-07-26 19:18:06
回答 1查看 502关注 0票数 5

我正在尝试理解C++中的异步模型。我正在研究4个旨在处理异步I/O的库:

  1. liburing (C版C++版本):为io_uring提供一个接口。C++版本使用协同服务。
  2. 利邦费克斯:实现C++发送/接收异步编程模型
  3. Boost.Asio:用于异步网络和底层I/O编程的库
  4. CppCoro:为使用协同服务提供了大量的通用基元。

这些库有大量的重叠。

执行上下文和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 )的接口?

EN

回答 1

Stack Overflow用户

发布于 2022-07-26 19:46:19

看看asio-grpc,我认为他们在示例中几乎包含了您的所有比较。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73128677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档