【问题标题】:Python socket I/O performance compared to other languages与其他语言相比,Python 套接字 I/O 性能
【发布时间】:2012-05-31 12:50:56
【问题描述】:

我正在编写一个 python 程序,在 Windows 上工作,该程序有大量线程和 I/O,它在其 I/O 中大量使用套接字来发送和接收来自远程位置的数据,除此之外,它有一些使用正则表达式的字符串操作。

我的问题是:性能方面,与 Java 或 C# 相比,python 是此类程序的最佳编程语言吗?是否有其他语言更符合上述描述?

【问题讨论】:

  • .Net 是一个很棒的平台。如果您只在 Windows 上,VB 或 C# 将很好地集成。确实,这取决于您和支持它的团队,而不是特定的语言。
  • > 与 Java 或 C# 相比,python 是此类程序的最佳编程语言吗? ——不可能客观地回答这个问题。

标签: python performance sockets programming-languages io


【解决方案1】:

您的要求是:

  1. 在 Windows 上工作;
  2. 程序具有繁重的线程和 I/O
  3. 它在其 I/O 中大量使用套接字来发送和接收数据
  4. 它使用正则表达式进行了一些字符串操作。

很难确定哪种语言最适合此任务的原因是几乎所有语言都符合您的要求。

  1. Windows:所有语言的笔记
  2. 大量使用线程:C#、Java、C、C++、Haskell、Scala、Clojure、Erlang。基于处理的线程或其他变通方法:Ruby、Python 和其他没有真正细粒度并发的解释型语言。
  3. 套接字:所有需要注意的语言
  4. 正则表达式:所有需要注意的语言

最有趣的限制是需要做大量的并发 IO。这意味着您的瓶颈将在于上下文切换、线程成本以及是否可以在多个内核上运行线程池。根据您的缩放比例,您可能希望使用一种编译语言,以及一种具有轻量级线程的语言,可以轻松使用多个内核。这将列表缩减为 C++、Haskell、Erlang、Java、Scala。等等。您可能可以通过使用分叉进程来解决 Python 中的全局解释器锁,但它不会那么细粒度。

【讨论】:

    【解决方案2】:

    有趣的问题。处理套接字的 python 模块直接包装了底层的操作系统功能。因此,在给定的操作中,您不可能看到任何速度差异,具体取决于包装语言。

    如果您参与了非常紧密循环,例如查看流中的每个字符,您会注意到 python 的速度问题。

    您没有指明要发送多少数据。除非您正在采用必须维护大量 I/O 的解决方案,否则 python 可能会做得很好。在 python 中实现 nginx 或 memcached 或 redis...不是一个好主意。

    和往常一样……基准测试。如果它足够快,那为什么要改变?

    PS。你程序员可能会在 python 中更快地完成它!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 2012-03-30
      • 2011-09-16
      • 2015-01-30
      • 2018-10-16
      • 2020-08-15
      • 2011-05-07
      相关资源
      最近更新 更多