- liburing(C版本, C++版本):提供io_uring的接口。C++版本使用协程。
- libunifex:实现C++发送者/接收者异步编程模型
- Boost.Asio:用于异步网络和低级I/O编程的库
- 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)的接口吗?