C/Python 套接字性能?

Posted

技术标签:

【中文标题】C/Python 套接字性能?【英文标题】:C/Python Socket Performance? 【发布时间】:2010-12-26 22:31:50 【问题描述】:

我的问题只是与 C 和 Python 中的套接字之间的性能差异有关。由于我的 Python 构建是 CPython,我认为它是相似的,但我很好奇是否有人真的有“真正的”基准,或者至少是基于证据的意见。

我的逻辑是这样的:

C 套接字快得多?然后写一个C 延期。 没有/几乎没有区别? 继续用 Python 写代码并弄清楚 如何获得数据包级别控制 (scapy?dpkt?)

我相信有人会出于背景或好奇而想知道。我计划为自己构建一种代理(不用于互联网浏览、匿名等),并将我想使用的应用程序绑定到特定端口。然后,该端口上的所有数据包将被排队,修改地址头,然后发送等等。

提前致谢。

【问题讨论】:

【参考方案1】:

我认为 C 会更快,但 python 会更容易管理和使用。

差异会如此之小,除非您尝试发送大量数据(像 100 万 gb/秒这样愚蠢的数据,否则您不需要它)

【讨论】:

如果网络速度是限制因素,那么您对编程语言的选择就会变得不那么重要。【参考方案2】:

一般来说,Python 中的套接字执行得很好。例如,BitTorrent 跟踪服务器的参考实现是用 Python 编写的。

在进行网络操作时,网络速度通常是限制因素。也就是说,C 和 Python 的套接字代码之间任何可能的微小速度差异都会被您正在执行某种类型的网络这一事实完全掩盖。

但是,您对要执行的操作的描述表明您要检查和修改单个 IP 数据包。这超出了 Python 的标准网络库的能力,并且在任何情况下都是非常依赖于操作系统的操作。而不是问“哪个更快?”你需要先问“这可能吗?”

【讨论】:

谢谢格雷格。您对“这可能吗?”尤其正确。我不相信它是。 dpkt 允许构造数据包的能力,但我确信我不能在数据包级别使用 python 套接字(违背它的抽象目的)。所以,我相信我必须编写一个 C 扩展,以便我可以使用允许这样做的 netfilter 库。但是...这可能需要我在 C 中做套接字(我不知道,我以前从未做过 C 扩展)。 @Kevin,你为什么有信心自己做不到? “原始”套接字支持不合适吗? (初学者请参阅docs.python.org/library/socket.html 末尾的最后一个示例。)

以上是关于C/Python 套接字性能?的主要内容,如果未能解决你的问题,请参考以下文章

使用带有套接字的 Java 对象流的性能问题

TCP 环回连接与 Unix 域套接字性能

RPC、套接字和性能注意事项

我需要使用 jmeter 和 redline 13 加载/性能测试聊天套接字

Apache ActiveMQ 与原始套接字的性能开销是多少?

Ruby 和 Net::SCP 传输(套接字)的性能问题