C++;-cURL-将多个easy_init与std::async一起使用与使用单个多_init之间的区别 在我的C++程序中,我正在从Web下载数据。我可以在concurent中下载多达100次,但它们通常不会立即启动,而且通常只有4次等
目前,我正在使用C++;-cURL-将多个easy_init与std::async一起使用与使用单个多_init之间的区别 在我的C++程序中,我正在从Web下载数据。我可以在concurent中下载多达100次,但它们通常不会立即启动,而且通常只有4次等,c++,curl,C++,Curl,目前,我正在使用curl\u easy\u init和std::async在后台运行下载。 我读过有关curl\u multi\u init的文章。据我所知,它只是一个由cURL开发人员制作的异步包装器。我是对的,还是有任何其他原因,为什么我应该使用它来代替easy_init的多个异步作业?子系统是完全异步的,它有许多优点,例如: 它不会消耗任意数量的线程。每次调用std::async都将创建一个线程。如果此线程创建是无限制的,那么您的程序可能会意外地耗尽资源 传输可以在您的控制下中断或取消 由
curl\u easy\u init
和std::async
在后台运行下载。
我读过有关curl\u multi\u init的文章。据我所知,它只是一个由cURL开发人员制作的异步包装器。我是对的,还是有任何其他原因,为什么我应该使用它来代替easy_init的多个异步作业?子系统是完全异步的,它有许多优点,例如:
std::async
都将创建一个线程。如果此线程创建是无限制的,那么您的程序可能会意外地耗尽资源select()
调用(或select\u multi\u socket
的等效调用)curl\u multi\u
子系统是完全异步的,具有许多优点,例如:
std::async
都将创建一个线程。如果此线程创建是无限制的,那么您的程序可能会意外地耗尽资源select()
调用(或select\u multi\u socket
的等效调用)使用多接口的另一个额外好处是,默认情况下连接缓存是共享的,而不是每个线程中都有一个单独的连接缓存。尽管libcurl也提供了一个API来共享它,只需多做一点工作…@hanshenrik,但我假设了launch::async的情况。当然,标准上说“就像一条新的线”。但是,创建无限线程的问题仍然存在。标准中没有任何内容阻止它,因此我们必须假设它可能会发生(就像在gcc和clang上一样)。使用多接口的另一个额外好处是,默认情况下连接缓存是共享的,而不是每个线程中都有一个单独的连接缓存。尽管libcurl也提供了一个API来共享它,只需多做一点工作…@hanshenrik,但我假设了launch::async的情况。当然,标准上说“就像一条新的线”。但是,创建无限线程的问题仍然存在。标准中没有任何内容阻止它,因此我们必须假设它可能发生(正如它在gcc和clang上所做的那样)