gpt4 book ai didi

perl - 如何加快我的 Perl 程序?

转载 作者:行者123 更新时间:2023-12-03 09:12:52 25 4
gpt4 key购买 nike

这确实是两个问题,但它们非常相似,为了简单起见,我想我会把它们放在一起:

  • 首先 :给定一个已建立的 Perl 项目,除了简单的代码内优化之外,还有哪些不错的方法可以加速它?
  • 其次 : 在 Perl 中从头开始编写程序时,有哪些可以大大提高性能的好方法?

  • 对于第一个问题,假设您收到了一个写得很体面的项目,并且您需要提高性能,但您似乎无法通过重构/优化获得太多 yield 。在这种情况下,除了用 C 语言重写它之外,你会怎么做才能加快它的速度?

    请远离一般的优化技术,除非它们是 Perl 特定的。

    我问过这个 Python早些时候,我认为对其他语言这样做可能会更好(我特别好奇是否有 psychopyrex 的推论适用于 Perl)。

    最佳答案

    有很多事情你可以改进,所以你首先必须弄清楚什么是慢的。其他人已经回答了这个问题。我在 Mastering Perl 中谈到了这一点也。

    编写新代码时要考虑的事项的不完整列表:

  • 带有类似 Devel::NYTProf 的个人资料查看您在代码中花费的大部分时间。有时这令人惊讶且易于修复。 Mastering Perl对此有很多建议。
  • Perl 每次都必须编译源代码,编译速度可能很慢。它必须找到所有文件等等。例如,参见 "A Timely Start" ,作者 Jean-Louis Leroy,他通过优化 @INC 中的模块位置来加速一切.如果您的启动成本昂贵且不可避免,您可能还会考虑持久性 perls,例如 pperl、mod_perl 等。
  • 查看您使用的一些模块。他们是否有很长的依赖链只是为了做简单的事情?当然,我们不喜欢重新发明,但如果你想装在车上的轮子也有三艘船、五只山羊和一个芝士汉堡,也许你想自己造一个轮子(或者找一个不同的) .
  • 方法调用可能很昂贵。例如,在 Perl::Critic 测试套件中,它调用 isa减慢速度。这并不是在所有情况下都可以真正避免的事情,但要牢记这一点。有人有一句很棒的名言,比如“没有人介意放弃 2 倍;只有当你有 10 个人在做这件事时,这才是糟糕的。” :) Perl v5.22 对此进行了一些性能改进。
  • 如果您一遍又一遍地调用相同的昂贵方法但得到相同的答案,例如 Memoize可能适合你。它是方法调用的代理。如果它真的是一个函数(意思是,相同的输入给出相同的输出而没有副作用),你真的不需要重复调​​用它。
  • Apache::DBI 等模块可以为您重用数据库句柄,以避免昂贵的数据库连接打开。这是非常简单的代码,因此即使您不使用 Apache,也可以向您展示如何做到这一点。
  • Perl 不会为你做尾递归优化,所以不要从 Lisp 过来,以为你会做出这些 super 快速的递归算法。您可以轻松地将它们转化为迭代解决方案(我们将在 Intermediate Perl 中讨论。
  • 看看你的正则表达式。大量开放式量词(例如 .* )会导致大量回溯。查看 Jeffrey Freidl 的 Mastering Regular Expressions了解所有血腥细节(以及多种语言)。另请查看 his regex website .
  • 知道你的 perl 是如何编译的。你真的需要线程和DDEBUGGING ?那些会让你慢一点。查看 perlbench 实用程序以比较不同的 perl 二进制文件。
  • 针对不同的 Perls 对您的应用程序进行基准测试。一些较新的版本有加速,但一些较旧的版本对于有限的操作集可能更快。我没有特别的建议,因为我不知道你在做什么。
  • 展开工作。你能在其他进程或远程计算机上做一些异步工作吗?让您的程序在其他人解决一些子问题时处理其他事情。 Perl 有几个异步和负载转移模块。但请注意,做好这些事情的脚手架可能会失去任何好处。
  • 关于perl - 如何加快我的 Perl 程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/177122/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com