【问题标题】:Multiple simultaneous tcp client connections for performace test用于性能测试的多个同时 tcp 客户端连接
【发布时间】:2010-09-03 13:23:20
【问题描述】:

我需要同时创建多个 TCP 连接到一些自定义 TCP 服务器应用程序以进行性能测试。我知道很多这样的网络(即基于libcurlcurl-loader),但我没有找到一些通用的。
客户端的场景是最简单的:创建连接,发送特殊数据,读取答案并关闭连接。每一步都有时间戳。所有时间戳都应写入文件以供进一步计算。我需要大约 10 000 个这样的并行连接。
我更喜欢一些现成的解决方案,但在 Google 中找不到任何东西,所以我准备用 Python 编写这个解决方案。如果是这样,你能给我推荐一个可以产生这么多连接的合适的 python 模块吗? (多处理,扭曲..?)

【问题讨论】:

    标签: python network-programming parallel-processing tcpclient


    【解决方案1】:

    我的两分钱:

    1. 选择 Twisted 或任何其他异步网络库。
    2. 确保您可以在客户端和客户端上打开足够多的文件描述符 服务器。例如,在我的 Linux 机器上,我最多可以有 1024 个文件 默认文件描述符:

      carlos@marcelino:~$ ulimit -a
      core file size          (blocks, -c) 0
      data seg size           (kbytes, -d) unlimited
      [..]
      open files                      (-n) 1024
      [..]
      
    3. 在不同的机器上运行客户端和服务器可能是有代价的。

    【讨论】:

    • 如何与twisted建立大量连接?有一些工作示例/参考吗?
    【解决方案2】:

    处理 10k 连接是一个棘手的问题(称为 C10K 问题)。如果您需要实数,请坚持使用 C++(Boost/POCO 库或 OS 原生 API),或将客户端分布到 10 个负载生成客户端。

    你不应该用 Python 来尝试这个(在 1 个 CPU 内核上处理 10'000 个连接 - 不现实)。

    【讨论】:

    • socket 在 Python 中是 C extension(至少在 Python 3.1.2 中);在 CPU 使用方面不应该有太多的开销,除非您为每个连接生成一个新线程,因为 Python 的线程库不是本机实现的。还是 C++ 更高效?
    • C++ 的效率要高得多,你可以使用所有的 CPU 内核。由于 GIL,Python 在任何时候都只能在 1 个核心上工作。有了这么多的连接,这里和那里的开销很小。
    • Python 多线程不是选项,当然。但也许多处理会有所帮助..?
    • 是的,这样更好。但是你仍然比 C++ 慢 10-100 倍。我会在 100 个连接上使用 Python,但不是 10'000。
    • 使用 Twisted、asyncore 或几乎任何其他事件驱动框架在 Python 中处理 10,000 多个连接非常容易。使用多处理将工作分散到多个内核。
    猜你喜欢
    • 1970-01-01
    • 2015-10-24
    • 2013-02-17
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 2019-03-15
    • 1970-01-01
    相关资源
    最近更新 更多