可以使用线程来提高perl中散列键匹配的速度吗?

时间:2014-07-03 16:19:37

标签: multithreading perl

可以使用线程来提高散列键匹配的速度吗? 我有一个包含前1个Mil alexa网站的哈希。匹配~100个独特的主机对抗alexa哈希需要比我想要的更长。什么/哪里是最合适的方式/地方引入线程来加速这件事?

foreach my $host (keys %unique_hosts) {      
  if ($host =~ /(([\w\-]+)\.([\w\-]+))$/) {
    my $domain = $1;
    $in_alexa++ if /$domain$/ ~~ %alexa_sites;
  }
}

编辑:Mem看起来不错。

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND 
7533 user      20   0  457m 339m 1676 R 99.0 34.2   0:15.31 bind.pl 

1 个答案:

答案 0 :(得分:4)

对于每个主机,您正在进行一百万个正则表达式匹配。这就是为什么它很慢。

是的,线程可以通过使用其他未使用的CPU核心来提供帮助。但那不是正确的解决方案。

我假设您正在尝试检查$host%alexa_sites的密钥,还是%alexa_sites中密钥的子域。

for my $host (keys %unique_hosts) {      
    while (1) {
        if (exists($alexa_sites{$host})) {
           ++$in_alexa;
           last;
        }

        $host =~ s/^[^.]*\.//
           or last;
    }
}

现在你正在进行~300次快速哈希查找,而不是100万次慢速正则表达式匹配。