我们正在构建一个测试工具来将二进制消息推送到 UDP 多播上。
原型使用 Twisted reactor 循环来推送消息,这几乎达到了我们需要的流量水平——大约每秒 120000 条消息。
我们的测试机器上有 16 个核心,显然我想将其分布在这些核心上,以真正让线束飞起来。
是否有人对我们如何构建应用程序(使用事件循环方法或 CSP 样式方法)以提高此输出有任何想法。
此外,原型中的大部分时间都花在写 UDP 上——作为 IO,我不应该感到惊讶,但我错过了什么吗?
欢迎任何想法。
多个网卡,硬件或内核接口是限制。使用 Broadcom Corporation NetXtreme BCM5704S 千兆以太网适配器,我每秒只能达到 69,000 个数据包。尝试在同一子网上使用所有四个 NIC 的四路英特尔千兆服务器适配器。
当出现在 Python 应用程序中利用多个内核的问题时,显而易见的答案是使用多个进程。使用 Twisted,您可以reactor.spawnProcess
用来启动子进程。您也可以通过其他方式(如 shell 脚本)启动应用程序的 16 个实例。当然,这要求您的应用程序可以明智地同时运行多个实例。具体如何划分工作以使每个流程都可以承担其中的一部分取决于工作的性质。
不过,我希望单个 GigE 链接在您让所有 16 个内核全速运行之前很久就饱和了。确保您专注于系统中的瓶颈。正如 Steve-o 所说,您可能还需要机器中的多个 NIC。