Python与Perl在Wide Finder挑战中的解决方案比较

8 投票
5 回答
1836 浏览
提问于 2025-04-11 09:23

我会非常感激,如果你能对比一下获胜的 O’Rourke的Perl解决方案Lundh的Python解决方案,因为我对Perl不太了解,搞不清楚里面的情况。更具体来说,我想知道是什么让Perl版本比Python快了3倍:是算法更优秀,C扩展的质量,还是其他因素?

Wide Finder: 结果

5 个回答

3

最近,Perl 语言推出了一个叫做多核引擎(MCE)的工具。这个工具在处理数据时表现得非常不错,即使是在从硬盘直接读取数据时,使用8个工作线程(冷缓存)也能运行得很好。它的工作方式类似于银行排队模型,用来读取输入数据。你可以在图片文件夹里找到相关的幻灯片。

这个工具的源代码可以在这里找到:http://code.google.com/p/many-core-engine-perl/

关于 Perl 的文档可以在这里查看:https://metacpan.org/module/MCE

还有一个使用 MCE 实现的宽查找(Wide Finder)示例,放在 examples/tbray/ 文件夹下。

你可以在这里找到这个示例:https://metacpan.org/source/MARIOROY/MCE-1.514/examples/tbray/

希望你喜欢 MCE!

Script....:  baseline1  baseline2  wf_mce1  wf_mce2  wf_mce3  wf_mmap
Cold cache:      1.674      1.370    1.252    1.182    1.174    3.056
Warm cache:      1.236      0.923    0.277    0.106    0.098    0.092
5

Perl在处理文本方面非常强大,优化得很好。由于涉及的因素很多,所以很难准确说出它们之间的具体区别。文本在内部的表示方式完全不同,比如utf-8和utf-16/utf-32之间的差异。而且它们的正则表达式引擎也完全不同。Python的正则表达式引擎是一个自定义的,使用得不如Perl的多。实际上,参与Python正则表达式引擎开发的开发者非常少(我觉得它基本上没有得到维护),而Perl的正则表达式引擎则是这个语言的“核心部分”。

毕竟,Perl就是处理文本的语言。

10

Perl的正则表达式实现得更好,这只是事情的一部分。可是,这并不能解释为什么Perl的实现能更好地适应更多的处理器。随着处理器数量的增加,这个差距会变得更大。出于某种原因,Python的实现在这方面存在问题。

撰写回答