gpt4 book ai didi

multithreading - 单个事件循环中是否允许多个 cURL 多句柄?

转载 作者:行者123 更新时间:2023-12-03 12:52:21 25 4
gpt4 key购买 nike

我正在创建一个服务器,它将处理多个并发客户端连接(大约 100 个),客户端在其中抽取大量数据和服务器包并将其发送到另一个远程位置。

我想做的是将每个客户端发送的数据“分组”到他们自己的数据结构中(比如一些链表),并同时处理这些列表。吞吐量很重要,因此我希望能够同时发送尽可能多的数据(假设同时处理多达 10k 个简单句柄)。

我正在考虑的方法是:

  • 拥有一个大型线程池(比如 100 个线程),每个进程都可以轻松处理。
  • 让一个线程处理所有 10k 简单句柄的多句柄。
  • 创建多个线程(比如 4 个)处理一个多句柄,因此每个线程处理 2500 个简单句柄。
  • 每个客户端有一个多句柄,因此可能有 100 个线程每个处理一个多句柄。

  • 我想知道的是我是否可以“组合”#2 和#3,这样我就有一个线程可以在单个事件循环中处理多个多句柄。这样的事情是否允许,如果允许,这是否有意义?如果可能的话,它将满足我对每个多句柄的客户端处理分组的要求,并且还允许我利用每个多句柄的持久连接。如果不是,我要充分利用所有客户端的持久连接的唯一方法是选项#4。由于我们遵循的编程模型的某些限制,我最好减少使用的线程数。

    最佳答案

    这是一个复杂的问题,无法简单回答。它还取决于您可能有但未在此处指定的许多本地条件和其他要求。我建议您构建一些原型(prototype)并根据您的特定条件对它们进行相互测量。

    :您可以在同一个线程中使用多个多句柄,但它可能会变得有点古怪,我认为您不会从中看到任何好处,而不是只使用一个并将所有简单句柄添加到该单个中。

    我个人的偏好是#3,但线程数可能比 4 略多,因为今天你很容易拥有 8 个线程的 CPU,很快就会有 16 个线程,对于 CPU 受限的情况,你最好分散尽可能多的负载以获得最高性能(但不要太多以从缓存和连接重用等中获得)。

    此外,由于每个多 handle 然后处理 N 个简单 handle ,因此总是存在您必须为特殊传输做一些事情的风险,这会使其他 N-1 传输暂停一点,然后最好如果您已经将总数分成几个线程,这样它就不会阻塞所有传输。

    最后,为了获得这个速度,您可能需要使用 curl_multi_socket_action基于事件的 API 以获得最佳性能。

    关于multithreading - 单个事件循环中是否允许多个 cURL 多句柄?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25670873/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com