7

与手写 C 相比,pypy 是否可以快速处理线程和套接字?与普通蟒蛇相比?

我只是尝试一下,但是有问题的 python 代码是为我不是管理员的一小群计算机编写的。我在这里问是因为我在谷歌上的尝试只提供了与 cython、空载燕子等的比较,如果这不太可能奏效,我不想让管理员为此烦恼。

我实际上并不需要 pypy 一样擅长 C。我正在寻找使用它,因为现在解释器的开销完全掩盖了我试图计时的计算。我只需要 pypy 就可以让我靠近手写 C。

4

3 回答 3

12

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

不,通常情况相同或更糟。

PyPy 保留了 CPython 拥有的全局解释器锁 (GIL)。这意味着本机线程无法并行运行 Python 代码。Python 线程还具有额外的语义,这些语义是有代价的。许多同步都围绕着 Python 线程的启动、关闭和线程对象的跟踪。相比之下,C 线程启动速度更快,使用成本更低,并且可以完全并行运行。

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

与普通蟒蛇相比?

是的。但并不多。

由于上述原因,PyPy 除了由于 JIT 和其他开销导致的偶尔峰值之外,对于等效代码需要更少的 CPU 时间。因此,线程和套接字处理都更快且响应更快。

我只是尝试一下,但是有问题的 python 代码是为我不是管理员的一小群计算机编写的。我在这里问是因为我在谷歌上的尝试只提供了与 cython、空载燕子等的比较,如果这不太可能奏效,我不想让管理员为此烦恼。

只有当您的代码受 CPU 限制时,PyPy 才会显着提高性能。PyPy 是我所知道的本机运行的最快的 Python 实现。如果真正的线程并行性对您来说是一个高优先级,您可以研究其他一些实现,或者考虑编写 C 扩展。

我实际上并不需要 pypy 一样擅长 C。我正在寻找使用它,因为现在解释器的开销完全掩盖了我试图计时的计算。我只需要 pypy 就可以让我靠近手写 C。

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

于 2012-03-25T04:22:39.807 回答
1

它应该相当快地处理套接字和线程,我不能保证它会和 C 一样快,PyPy 使用警卫来确保值可以在 C 函数中运行。因为 PyPy 使用 JIT,它会在大循环的情况下提供最大的性能增益。您可能会在这里查看 pypy 的速度测试

于 2012-02-26T08:43:28.453 回答
-4

问题不在于调用标准 API 中的例程,而在于其间的 pypy 处理。pypy 处理越少,您就越接近 C 速度(因为一旦执行进入实际的 API 代码,执行速度就没有差异)。不过我不会期待奇迹。

我发现了不同编程语言之间如何相互比较的比较,虽然不包括 pypy,但 python 在原始速度方面做得很好,也做得不好。

于 2012-03-19T16:21:48.240 回答