多线程 curl 同时处理多个连接

     2023-02-22     122

关键词:

【中文标题】多线程 curl 同时处理多个连接【英文标题】:Multi threaded curl handling multiple connections at the same time 【发布时间】: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。 【参考方案1】:

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

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

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

多线程基础知识总结

  0、并发和并行、进程核线程、多进程和多线程的区别:  (这里的时间和时刻上的概念同物理上的一样)  并发:在一段时间内多个任务同时执行,或者说是在一段很短的时间内可以执行多条程序指令,微观上看起来好像... 查看详情

多线程

多线程的引入1.什么是线程线程是程序执行的一条路径,一个进程中可以包含多条线程多线程并发执行可以提高程序的效率,可以同时完成多项工作2.多线程的应用场景红蜘蛛同时共享屏幕给多个电脑迅雷开启多条线程一起下载QQ同... 查看详情

js是多线程的吗,为啥可以同时执行多个语句

...neout和setInetrval里请求和回调函数是异步的,在html5里有多线程的方法worker是异步的work=newWorker("script/lengthytask.js");传入参数是js文件的连接;work.postmessage("helloworld");用来主线程向子线程发送数据;work.addEventListene... 查看详情

为啥服务器在非多线程的情况下会同时处理多个客户端?

】为啥服务器在非多线程的情况下会同时处理多个客户端?【英文标题】:Whydoesserverprocessmultipleclientsatthesametimewhenit\'snotmultithreaded?为什么服务器在非多线程的情况下会同时处理多个客户端?【发布时间】:2021-05-1717:30:12【问题... 查看详情

tomcat如何同时处理多个并发请求?

...持与客户端的连接打开,直到响应到来?如果tomcat使用多线程环境?代码是否需要完全线程安全?或者tomcat自己处理。【问题讨 查看详情

java多线程是啥?一个处理器怎么同时处理多个程序

...它们之间的通信和转换都需要操作系统付出较大的开销。线程是进程中的一个实体,是被系统独立调度和分派的基本单位。线程自己基本上不拥有系统资源,但它可以与同属一个进程的其他线程共享进程所拥有的全部资源。所以... 查看详情

java高级之多线程

1.1,多线程的作用:  *线程是程序执行的一条路径,一个进程中可以包含多条线程  *多线程并发执行可以提高程序的效率,可以同时完成多项工作1.2,多线程的应用场景:  *红蜘蛛同时共享屏幕给多个电脑   *迅雷开启多条... 查看详情

servlet容器如何同时来处理多个请求

工作者线程WorkThread:执行代码的一组线程调度线程DispatcherThread:每个线程都具有分配给它的线程优先级,线程是根据优先级调度执行的Servlet采用多线程来处理多个请求同时访问。servlet依赖于一个线程池来服务请求。线程池实际上... 查看详情

day24

24.01_多线程(多线程的引入)(了解)1.什么是线程线程是程序执行的一条路径,一个进程中可以包含多条线程多线程并发执行可以提高程序的效率,可以同时完成多项工作2.多线程的应用场景红蜘蛛同时共享屏幕给多个电脑迅雷开启多... 查看详情

java多线程01

多线程·Runnable和Thread多线程的引入*A:什么是线程  *线程是程序执行的一条路径,一个进程中可以包含多条线程  *多线程并发执行可以提高程序的效率,可以同时完成多项工作*B:多线程的应用场景  *红蜘蛛同时共... 查看详情

消费端从activemq中取出一定量消息后,是一个一个进行处理,还是开启多个线程同时处理呢?

...A如果你用异步接收MessageListener的onMessage()监听消费就是多线程,如果是同步接收receive()方法接收就是单线程同步接收追问那onMessage()监听消费的处理线程大小可以设置吗?追答默认情况下,MQ每个destination都对应唯一的线程;写消... 查看详情

线程概述

1:线程和进程线程是进程处理的最小单元。进程是线程的集合,一个进程至少包含一个线程。并发和并行是两个概念,并行是指同一个时刻,多条指令在多个处理器同时执行。而并发是多条指令在同一个处理器快速的轮换执行... 查看详情

认识多线程

1,进程与线程  对于WORD来讲,每次启动一个WORD相当于操作系统上分配了一个进程。  线程实际上是进程的进一步划分,从WORD来看,可以把拼写检查当作一个线程处理,当然,会同时存在多个线程。  如果进程没有了,... 查看详情

tcp服务器如何使用select处理多客户连接(代码片段)

...思路TCP服务器端程序,对于每一个连接请求,可以使用多线程的方式为每一个连接启动一个线程处理该连接的通信,但使用多线程的方式,通常认为有如下缺点:多线程编程和调试相对都比较难,而且有时会出现无法预知的问题... 查看详情

pthread多线程是指同时运行多个程序吗?

pthread多线程是不是同时运行多个程序,各线程相互之间没关系?没影响吗?参考技术A不是的,windows每次运行只能运行一个程序或者一个进程就是process。进程里面可以调用多个线程thread,多个线程是按照CPU分时间片进行的,所... 查看详情

多线程如何在c中实现?

多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统... 查看详情

多线程如何在c中实现?

多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统... 查看详情

多线程(代码片段)

主要内容线程同步线程状态等待与唤醒案例线程池学习目标[]说出进程的概念[]说出线程的概念[]能够理解并发与并行的区别[]能够开启新线程[]能够描述Java中多线程运行原理[]能够使用继承类的方式创建多线程[]能够使用实现接口... 查看详情