2009-12-15 55 views
10

我的問題只涉及C和Python中的套接字在性能上的差異。由於我的Python版本是CPython,我認爲它是相似的,但我很好奇,如果有人真的有「真實」的基準,或至少有一個基於證據的意見。C/Python Socket性能?

我的邏輯是這樣:

  • 交流電插座更快?然後寫一個C 擴展名。
  • 沒有/幾乎沒有區別? 保持在Python編寫,並找出 如何獲取數據包級別控制 (Scapy的?dpkt?)

我敢肯定有人會想知道這兩種上下文或好奇。我打算爲自己構建一種代理(不適用於Internet瀏覽,匿名等),並將我想要使用的應用程序綁定到特定端口。然後,所述端口上的所有分組將被排隊,地址頭被修改,然後被髮送等等。

在此先感謝。

回答

12

一般情況下, Python中的套接字執行得很好。例如,BitTorrent跟蹤器服務器的參考實現是用Python編寫的。

在進行聯網操作時,網絡的速度通常是限制因素。也就是說,C和Python的套接字代碼之間速度的任何可能的微小差別完全被你正在做某種事情的網絡所掩蓋。

但是,您對您要執行的操作的描述表明您要檢查並修改個別IP 數據包。這超出了Python標準網絡庫的功能,並且在任何情況下都是與操作系統相關的操作。而不是問「哪個更快?」你需要先問「這可能嗎?」

+0

謝謝Greg。你特別正確:「這可能嗎?」我不相信。 dpkt允許構造數據包的能力,但我相信我不能在數據包級別使用python套接字(反對它的抽象目的)。所以,我相信我必須編寫一個C擴展,以便我可以使用netfilter庫來允許這樣做。但是......這可能需要我在C中做套接字(我不知道,我以前從未做過C擴展)。 – Kevin 2009-12-15 19:32:33

+1

@凱文,你爲什麼不能這樣做? 「原始」套接字支持不適合嗎? (請參見http://docs.python.org/library/socket.html最後一個示例,以供初學者參考。) – 2009-12-16 01:58:26

1

我會認爲C會更快,但python會更容易管理和使用。

的差別會這麼小,你就不需要它,除非你正在嘗試發送的數據量羣衆(愚蠢的東西一樣百萬GB /秒笑)

+0

愚蠢?你會知道什麼?沒有upvotes我看到。 – 2012-10-11 22:19:15

+0

如果網絡速度是限制因素,那麼您選擇的編程語言變得不那麼重要。 – 2015-12-22 19:16:09