与手写的C相比,pypy能否快速处理线程和套接字?

时间:2012-02-26 05:29:38

标签: python c multithreading sockets pypy

与手写的C相比,pypy能否快速处理线程和套接字?与普通的python相比?

我会尝试一下,但有问题的python代码是为一小群计算机编写的,我不是管理员。我在这里问,因为我试图谷歌只提供与cython,unladen swallow等的比较,如果这不太可行,我不想让管理员知道它。

我实际上并不需要pypy来擅长C;我正在寻找使用它,因为现在解释器的开销完全掩盖了我想要计算的计算。我只需要pypy让我进入手写的C区。

3 个答案:

答案 0 :(得分:12)

  

与手写的C相比,pypy能否快速处理线程和套接字?

没有。它通常是相同或更糟。

PyPy保留了CPython所拥有的全局解释器锁(GIL)。这意味着本机线程无法并行运行Python代码。 Python线程还有额外的语义,需要付出代价。围绕Python线程启动,关闭和跟踪线程对象的同步很多。相比之下,C线程启动速度更快,使用起来更便宜,并且可以完全并行运行。

高效的套接字处理需要最大限度地减少等待下一个套接字事件所花费的时间。由于PyPy的线程模型仍然受GIL的约束,这意味着从阻塞套接字调用返回的线程在获取GIL之前无法继续。等效的C代码通常执行得更快,并且可以更快地返回等待套接字事件。

  

与普通的python相比?

是。但并不多。

由于上述原因,PyPy除了由于JIT和其他开销而偶尔出现尖峰外,还需要较少的CPU时间用于等效代码。因此,线程和套接字处理都更快,响应更快。

  

我会尝试一下,但有问题的python代码是为一小群计算机编写的,我不是管理员。我在这里问,因为我试图谷歌只提供与cython,unladen swallow等的比较,如果这不太可行,我不想让管理员知道它。

如果您的代码受CPU限制,PyPy只会显着提升性能。 PyPy是我所知道的本地运行的fastest Python实现。您可以调查一些other implementations,或考虑编写C扩展,如果真正的线程并行性是您的高优先级。

  

我实际上并不需要pypy来擅长C;我正在寻找使用它,因为现在解释器的开销完全掩盖了我想要计算的计算。我只需要pypy让我进入手写的C区。

用C来缩小性能差距是目前PyPy的最大特色。我强烈建议你尝试一下。

答案 1 :(得分:1)

它应该很快处理套接字和线程,我无法向你保证它会像C一样快,PyPy使用防护来确保在C函数中运行这些值是可以接受的。因为PyPy使用JIT,所以在大循环的情况下它会提供最大的性能提升。您可以查看pypy's speed tests here

答案 2 :(得分:-4)

问题不在于调用标准API中的例程和中间的pypy处理一样多。压缩越少,处理C速度越快(因为一旦执行进入实际的API代码,执行速度就没有差别)。我不会指望奇迹。

我发现了this comparison不同的编程语言如何互相攻击,虽然没有包含pypy,但python在原始速度方面并没有那么好。