C++ - cURL - 将多个 easy_init 与 std::async 一起使用与单个 multi_init 之间的区别

标签 c++ curl

在我的 C++ 程序中,我正在从 Web 下载数据。我最多可以并发下载 100 个,但它们通常不会立即开始,而且通常只能有 4 个等等。

目前,我正在使用 curl_easy_initstd::async 在后台运行下载。 我已阅读有关 curl_multi_init 的内容。据我了解,它只是 cURL 开发人员制作的异步包装器。我是正确的,还是有任何其他原因,为什么我应该使用它而不是使用 easy_init 的多个异步作业?

最佳答案

curl_multi_ 子系统是完全异步的,具有许多优点,例如:

  1. 它不会消耗任意数量的线程。每次调用 std::async 都会创建一个线程。如果此线程创建不受限制,您的程序可能会意外耗尽资源。

  2. 传输可以在您的控制下中断或取消。

  3. 这会更有效率,因为所有传输都共享同一个 IO 循环。唯一的争论点是 select() 调用(或 select_multi_socket 的等效调用)。

关于C++ - cURL - 将多个 easy_init 与 std::async 一起使用与单个 multi_init 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41622568/

相关文章:

c++ - 为什么在发送几 block 数据后文件上传停止(使用 multipart/form-data)?

c++ - 模板化的流操作符, Unresolved external 问题

c++ - OpenCV 的 cvAcc() 有什么作用?

php - Shopify Assets API 更新 collection.liquid 使用 PUT 方法提供 404 和 cURL

php - 是什么导致请求中的空字节值被过滤掉?

c++ - 在 C++ 中更改整个结构的字节顺序

authentication - 使用带有 Kerberos 的 cURL 在 Keycloak 上进行身份验证

rest - 地理服务器配置重新加载

php - Google API - 使用 PHP 的 URL 缩短器

c++ - QTimer 在单独的方法中启动时崩溃