【问题标题】:What is the CORE:match (opcode) subroutine in Perl profiling?Perl 分析中的 CORE:match (opcode) 子例程是什么?
【发布时间】:2023-04-07 20:12:01
【问题描述】:

我之前在 Perl 中编写了一些实用程序,现在我正在重写它们以提供一些新的/更好的功能。然而,事情似乎比原来的实用程序慢得多,所以我决定用 NYTProf 分析器运行一个。顺便说一句,很棒的分析器,仍在尝试找出所有有用的功能。

无论如何,我的程序 93% 的时间都花在了对 GeneModel::CORE:match (opcode) 子例程的调用上,而我知道这是什么。大多数谷歌点击指向其他人发布的 NYTProf 个人资料。我确实写了GeneModel 类/包,但是我不知道这个子例程是什么,为什么它被调用了这么多次,或者为什么它需要这么长时间。有什么想法吗?

【问题讨论】:

    标签: perl profiling subroutine


    【解决方案1】:

    CORE:match 是对正则表达式的调用——在这种情况下,在您的 GeneModel 包中。

    例如,如果我们分析此脚本,Devel::NYTProf 会报告对Foo::CORE:match 的 1000 次调用。

    use strict;
    use warnings;
    
    package Foo;
    my $s = 'foo foo';
    $s =~ /foo/ for 1 .. 1000;
    

    【讨论】:

      【解决方案2】:

      Perl 被编译为操作码。 match operator 导致匹配操作码。

      > perl -MO=Terse -e'm//'
      LISTOP (0x8c4b40) leave [1]
          OP (0x8c4070) enter
          COP (0x8c4780) nextstate
          PMOP (0x8c4260) match
      

      这不是一个子例程,而只是以这种方式表示,因为操作码分析是最近添加的,并且 UI 尚未经过大修以考虑到这一点。简而言之,分析器告诉您大部分时间都花在了正则表达式引擎上。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-25
        • 1970-01-01
        • 2010-10-11
        • 1970-01-01
        相关资源
        最近更新 更多