2

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

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

4

2 回答 2

2

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

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

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

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

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

于 2012-05-24T22:10:29.663 回答
1

您的要求是:

  1. 在窗户上工作;
  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 中的全局解释器锁,但它不会那么细粒度。

于 2012-05-25T15:27:57.173 回答