曾经看过Computer Language Benchmarks Game(以前称为大语言枪战)?
Perl目前在那里有一些相当健康的比赛。在我看来,可能还有一些地方可以改善Perl的分数。最大的一个是现在的chameneos-redux脚本 - Perl版本运行最糟糕的任何语言:比C基线解决方案慢1,626倍!关于如何制作和优化程序有some restrictions,并且有Perl的解释运行时惩罚,但是1,626次?必须有一些东西可以让这个程序的运行时间缩短。
看看source code和the challenge,如何提高速度?
答案 0 :(得分:6)
我通过source code分析器运行了Devel::SmallProf
。配置文件输出有点过于冗长,无法在此处发布,但您可以使用$ perl -d:SmallProf chameneos.pl 10000
自己查看结果(除非您确实需要,否则无需为6000000次会议运行!)有关详细信息,请参阅perlperf关于Perl中的一些分析工具。
事实证明,使用semaphores是主要的瓶颈。占用总CPU时间的大部分用于检查信号量是否被锁定。虽然我没有足够的时间来查看源代码使用信号量的原因,但可能是因为您可以完全使用信号量。这可能是你提高代码性能的最好机会。
答案 1 :(得分:2)
正如Zaid所说,Thread :: Semaphore相当慢。一种优化可能是对共享变量使用隐式锁而不是它们。它应该更快,但我怀疑它不会更快。
通常,Perl的线程实现很糟糕,需要进行大量的线程间通信。它非常适合没有通信的任务(与CPython的线程和CRuby的线程不同,它们实际上是先发制人的。)
有可能改善这种情况,我们需要更好的原语。
答案 2 :(得分:2)
我有一个基于Jesse Millikian的另一个版本的version,我认为该版本从未发布过。
我认为它可能比当前条目快〜7倍,并且使用标准模块。我不确定它是否真的符合所有规则。
我已经尝试了forks
模块,但我认为它会减慢它的速度。
答案 3 :(得分:1)