首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MultiThreaded Libcurl

MultiThreaded Libcurl
EN

Stack Overflow用户
提问于 2011-08-01 22:51:43
回答 3查看 7.2K关注 0票数 3

我需要使用Libcurl执行并行HTTP请求。

据我所知,我需要为每个线程创建一个新的句柄,并使用带有某种线程本地存储的CURLOPT_WRITEDATA。多界面是否让这项任务变得更容易了?

我也在使用cookie,使用CURLOPT_COOKIEFILECURLOPT_COOKIEJAR会让Libcurl为每个线程加载cookie文件吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-01 23:03:29

正如您可能知道的,libcurl不是线程安全的,所以您应该确保libcurl句柄永远不会在多个线程之间共享。每个线程都需要存储本地数据(尤其是连接句柄)。

因此,对于每个句柄,即每个线程,libcurl都需要从头开始读取cookie文件,因为这些信息不能共享。在我看来,这不是问题,尽管在更新它时可能会有问题(您将有多个线程尝试它)。

关于多接口,它允许您多路复用多个传输,因此这是另一种在单个线程中尝试完成的方法。

更新2013年3月

libcurl现在是线程安全的。

libcurl是免费的、线程安全的、兼容IPv6的、功能丰富、得到良好支持的、快速的、完全文档化的,并且已经被许多知名的、大的、成功的公司和无数的应用程序所使用。“

票数 8
EN

Stack Overflow用户

发布于 2011-08-01 23:01:00

这不是一个直接的答案,但是为什么并行HTTP请求需要多线程?

多接口就是为此目的而设计的:您添加多个句柄,然后通过一个调用处理所有这些句柄,所有这些句柄都在同一个线程中。从documentation

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

如果你想要多线程,我建议你在每个线程中使用简单的接口,忘记多接口。

共享只是在简单的处理之间共享数据,您可以使用具有/不具有多接口的接口。如果您确实使用多个线程,则必须提供自己的锁定。

票数 4
EN

Stack Overflow用户

发布于 2017-04-01 02:51:02

也可以查看。它就是为此目的而设计的,即在请求之间共享数据:

你可以让多个简单句柄在它们之间共享数据。让他们更新并使用相同的cookie数据库,DNS cache,TLS session cache!这样,每个单独的传输都将利用其他传输所做的数据更新。但是,共享接口不会在不同的轻松句柄之间共享活动连接或持久连接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6900222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档