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

C++ - cURL - difference between using multiple easy_init with std::async and single multi_init

本文关键字:init 一起 multi 单个 区别 之间 std cURL easy C++ async      更新时间:2023-10-16

在我的C++程序中,我正在从网络下载数据。我最多可以同时下载 100 次,但它们通常不会一次启动,通常只能有 4 次等。

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

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

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

  2. 在您的控制下,转账可能会中断或取消。

  3. 它将更加高效,因为所有传输共享相同的 IO 循环。唯一的争论点是select()调用(或select_multi_socket的等效调用)。