【问题标题】:Multi threaded curl handling multiple connections at the same time多线程 curl 同时处理多个连接
【发布时间】:2017-06-24 17:38:22
【问题描述】:

curl_multi 接口是否在内部产生新线程以同时处理多个请求?是否等于手动生成线程并仅使用 curl_easy 句柄?什么性能更高。我需要最多并发 1000 个请求。

https://curl.haxx.se/libcurl/c/multithread.html

是否使用 curl_multi 等于上面链接中的示例?

发件人:https://curl.haxx.se/libcurl/c/libcurl-multi.html

在同一线程中启用多个同时传输,而不会使应用程序变得复杂。

这是什么意思?它如何处理同一线程中的多个传输?我也可以用 100 个 curl_easy 句柄创建 100 个线程并在那里发出请求。

也许问题应该是:何时使用多线程,何时使用 curl_multi。

【问题讨论】:

  • "curl_multi 接口是否在内部生成新线程以同时处理多个请求?" 不。正如文档(由您自己引用)所说:“启用多个同时传输在同一个线程中".
  • 至于如何:文档链接到curl.haxx.se/libcurl/c/curl_multi_perform.html,其中显示了使用select 的示例。还有curl.haxx.se/libcurl/c/curl_multi_socket_action.html,看起来像是epoll/kqueue/whatever的接口。
  • C 还是 C++?它们是不同的语言。选择一个。
  • @tambre 他们没有什么不同,问题是关于 libcurl 的,所以没关系,它适用于两者。
  • @tambre libcurl 是 C API。

标签: c++ c libcurl


【解决方案1】:

没有简单或简单的答案。 libcurl 允许您和您的应用程序做出决定并支持在任一模式下工作。

libcurl 多接口是一种单核单线程方式,可以在同一个线程中进行大量并行传输。它允许轻松重用缓存、连接等。这有其明显的优势,但会使其在单个 CPU 中受 CPU 限制。

进行多线程传输将使每个线程/句柄都有自己的缓存和连接池等,这些会在它们有用时发生变化,但是当您可以将它们分散到各个位置时,它们将不太可能受 CPU 限制一组更大的内核/CPU。

哪个设计决定适合您,我们很难说。

【讨论】:

    【解决方案2】:

    单个 curl_multi 句柄上的所有连接都不会在同一个线程上运行。它使用单个 select/poll/epoll 事件循环和非阻塞套接字在同一个线程上同时处理所有连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-27
      相关资源
      最近更新 更多