Mar*_*ace 13 c++ asynchronous boost-asio executioncontext io-uring
我正在尝试理解 C++ 中的异步模型。我正在研究 4 个旨在处理异步 I/O 的库:
这些库有大量的重叠。
异步 I/O 的未来可能会在 Linux 机器上使用 io_uring。liburing 的存在是为了提供 io_uring 和io_service 的接口。然而,libunifex 还提供了io_uring_context。它们都明确使用io_uring
,但用法与 Boost.Asio 的io_context和 CppCoro 的io_service类似。
liburing io_service
、libunifex、io_uring_context
Boost.Asioio_context
和 CppCoroio_service
可以一起使用吗?如果我的代码包含所有这四个库,那么每个库都会有 1 个执行上下文吗?
本节包含 CppCoro 如何异步打开文件的示例。我相信这个模板类将在 Boost.Asio 中用于异步文件访问。libunifex 有一个 io_uring_text.cpp文档,其中包括对文件的异步写入。显然 liburing 是为了异步写入文件而存在的。
我应该只使用 io_uring 特定库进行文件访问吗?
大家都知道Boost.Asio提供网络功能。CppCoro也是如此。liburing GitHub 包含一个使用低级 C 代码的示例 echo 服务器。
Linbunifex 似乎不包含直接网络功能。我认为它应该与其他一些网络库结合起来。我是否可以将它与上述三个库之一结合起来,为旧库提供发送者-接收者接口?我该怎么做呢?
我猜测协程应该是让这些库共存的粘合剂。Boost.Asio与协程兼容。liburing4cpp 和 libunifex 将协程兼容性作为核心功能。另一方面,CppCoro 本质上是一个协程库。
谈论使用协程作为粘合剂是否有意义?我可以说“我将使用库 A 来实现异步函数,并使用库 B 来处理异步函数的输出”吗?
您希望看到有人同时使用所有这 4 个库吗?这些库中的任何一个都应该在其他库之上使用吗?
在功能重叠的情况下,这些库的性能比较如何?Boost.Asio 是否落后于新的异步模型?Boost.Asio 是否通过集成最新的异步模型保持领先地位?liburing4cpp 包含一个低级回显服务器,与 Boost.Asio 的现代界面没有太大可比性。基于低级 io_uring 使用的应用程序与使用 Boost.Asio 构建的应用程序相比如何?
我相信 libunifex 中的发送者/接收者主要是作为一个接口。我应该将它用作其他库(例如 Boost.Asio)的接口吗?