C++ - cURL - 将多个easy_init与 std::async 和单个multi_init一起使用之间的区别
C++ - cURL - difference between using multiple easy_init with std::async and single multi_init
在我的C++程序中,我正在从网络下载数据。我最多可以同时下载 100 次,但它们通常不会一次启动,通常只能有 4 次等。
目前,我正在使用curl_easy_init
和std::async
在后台运行下载。我读过关于curl_multi_init
.据我了解,它只是cURL开发人员制作的异步包装器。我是否正确,或者是否有任何其他原因,为什么我应该使用它而不是easy_init多个异步作业?
curl_multi_
子系统是完全异步的,具有许多优点,例如:
-
它不会消耗任意数量的线程。每次调用
std::async
都会创建一个线程。如果此线程创建是无限的,您将拥有一个可能意外耗尽资源的程序。 -
在您的控制下,转账可能会中断或取消。
-
它将更加高效,因为所有传输共享相同的 IO 循环。唯一的争论点是
select()
调用(或select_multi_socket
的等效调用)。
相关文章:
- 如何将enable-if与模板参数和参数包一起使用
- 如何将PERF_AMPLE_READ与mmap一起使用
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- GCC对可能有效的代码抛出init list生存期警告
- 如何将C++中的库和头与MinGW一起使用
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 为什么我不能将 rand() 与数组的大小一起使用?
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 不能将复制初始化与隐式转换的多个步骤一起使用
- 将fold表达式与std::一起用于两个元组
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 将 std::allocate_shared 与多态资源分配器一起使用
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- 将 exprtk 与自定义类的对象一起使用
- 将 std::set 与基于键的比较器一起使用
- 将 C++ 类与 Rcpp 一起使用,从 C 或 R 修改它
- 如何将 Eigen::Ref 与 pybind11 一起使用?
- 如何将AERT_Allocate与 std:vector 一起使用
- 将 out/in out 参数与 if/switch 的 init 语句一起使用