我正在创建一个服务器,它将处理多个并发客户端连接(大约100个),其中客户端抽取大量数据和服务器包并将其发送到另一个远程位置。在单个事件循环中是否允许多个cURL多个句柄?
我想做的是将从每个客户端发送的数据“分组”到他们自己的数据结构中(比如说一些链表),并且同时处理这些列表。吞吐量很重要,所以我希望能够尽可能多地发送数据(可以说最多可同时处理10k个简单的句柄)。
我想到的方法是:
- 有一个大的线程池(比如100个线程),其中每个处理一个简单的句柄。
- 有一个单线程处理所有10k简单句柄的多句柄。
- 创建多个线程(如4)处理多个句柄,因此每个句柄处理2500个简单的句柄。
- 每个客户端都有一个多处理器,因此每个处理一个多处理器的线程可能有100个。
我想知道的是,我是否可以'组合'#2和#3,使得我有一个线程可以在单个事件循环中处理多个多个句柄。这样的事情是否允许,如果是的话,它会更有意义吗?如果可能的话,它将满足我对每个多句柄分组客户端的要求,并且还可以让我利用每个多句柄的持久连接。如果没有,我完全利用所有客户端的持续连接的唯一方法是选项#4。最好我想减少使用的线程数量,这是由于我们所遵循的编程模型存在某些限制。
非常感谢您的快速响应!如果使用选项#3,我打算让多个线程拥有一个内核,所以完全同意你的看法。我的计划也是使用'curl_multi_socket_action' API,所以看起来我在正确的轨道上(这是我第一次使用curl)。我们仍然很高兴知道它允许每个线程拥有多个多线程,但我想我会选择#3并且看看这是怎么回事。 – James 2014-09-08 17:53:57