比较Boost.Asio、libunifex、liburing和CppCoro

11
我正在尝试理解C++中的异步模型。我正在研究四个声称处理异步I/O的库:
  1. liburing(C版本, C++版本):提供io_uring的接口。C++版本使用协程。
  2. libunifex:实现C++发送者/接收者异步编程模型
  3. Boost.Asio:用于异步网络和低级I/O编程的库
  4. CppCoro:提供大量通用协程原语
这些库有很多重叠之处。

执行上下文和io_uring

未来的异步I/O可能会在Linux机器上使用io_uring。liburing提供了一个接口,用于与io_service配合使用io_uring。然而,libunifex也提供了io_uring_context。这两个库都明确地使用了io_uring,但使用方式类似于Boost.Asio的io_context和CppCoro的io_service
可以同时使用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 GitHub包含一个示例回声服务器,使用低级C代码实现。

Linbunifex似乎没有直接提供网络功能。我猜想它应该与其他某个网络库结合使用。我可以将它与上述三个库之一结合起来,以给旧库提供发送器-接收器接口吗?我该如何做到这一点?

接口:协程

我猜想协程是将这些库组合在一起的粘合剂。Boost.Asio与协程兼容。liburing4cpp和libunifex具有协程兼容性作为其核心特性。另一方面,CppCoro本质上是一个协程库。

你认为使用协程作为粘合剂有意义吗?我能说“我将使用库A来实现异步函数,使用库B来处理异步函数的输出”吗?

我的问题

您是否期望看到有人同时使用这4个库?其中任何一个库是否应该在其他库之上使用?

在功能重叠的情况下,这些库在性能方面如何比较? Boost.Asio是否落后于新的异步模型? Boost.Asio通过集成最新的异步模型保持领先地位吗? liburing4cpp包括一个低级回显服务器,与Boost.Asio的现代接口相比差距很大。基于低级io_uring使用的应用程序与使用Boost.Asio构建的应用程序相比如何?

我认为libunifex中的发送器/接收器主要是作为接口。我应该将其用作其他库(例如Boost.Asio)的接口吗?


1
给那位投票关闭的人:您打算如何将这个问题分成多个问题?我应该有6个关于一对库的问题吗? - Mark Wallace
1
你更多或少在询问推荐,最终使用哪个库。很抱歉,这里是“不相关话题”(其他投票的人) - πάντα ῥεῖ
我对如何回答这14个问题没有建议,但是Stack Overflow并不适合处理“多个问题合一”的情况,正如该网站所表述的那样。你可能可以将其中一些问题合并成一个问题,而其他问题,比如“我应该…”和“你是否期望看到…”,可能是基于个人观点的,因此属于离题。 - Drew Dormann
1
@πάνταῥεῖ 我可以删除有关性能比较的部分,但这个问题非常关于这些库应该如何使用。liburing是io_uring的接口。发送器/接收器是i/o的接口。在io_uring之上使用Boost.Asio在Libunifex之上使用还是在io_uring之上使用Libunifex在Boost.Asio之上使用?Lewis Baker曾在Libunifex和CppCoro上工作。Libunifex是否应该用Sender/Receiver接口替换CppCoro?因此,在io_uring之上使用Boost.Asio在Libunifex之上是否有意义?我该怎么处理执行上下文? - Mark Wallace
这些问题基本上是关于异步模型的理论和实践。我认为所有这些问题都可以在不问使用哪个库的情况下提出。我想我在原始帖子中已经这样做了。 - Mark Wallace
1
在这里问多个问题被认为是“过于宽泛”。请每次只提一个问题。 - πάντα ῥεῖ
2个回答

2
看看asio-grpc,我认为他们在示例中几乎涵盖了你所有的比较。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接