Python与Perl在Wide Finder挑战中的解决方案比较
我会非常感激,如果你能对比一下获胜的 O’Rourke的Perl解决方案 和 Lundh的Python解决方案,因为我对Perl不太了解,搞不清楚里面的情况。更具体来说,我想知道是什么让Perl版本比Python快了3倍:是算法更优秀,C扩展的质量,还是其他因素?
5 个回答
最近,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
Perl在处理文本方面非常强大,优化得很好。由于涉及的因素很多,所以很难准确说出它们之间的具体区别。文本在内部的表示方式完全不同,比如utf-8和utf-16/utf-32之间的差异。而且它们的正则表达式引擎也完全不同。Python的正则表达式引擎是一个自定义的,使用得不如Perl的多。实际上,参与Python正则表达式引擎开发的开发者非常少(我觉得它基本上没有得到维护),而Perl的正则表达式引擎则是这个语言的“核心部分”。
毕竟,Perl就是处理文本的语言。
Perl的正则表达式实现得更好,这只是事情的一部分。可是,这并不能解释为什么Perl的实现能更好地适应更多的处理器。随着处理器数量的增加,这个差距会变得更大。出于某种原因,Python的实现在这方面存在问题。