Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 线程可以用来提高perl中哈希键匹配的速度吗?_Multithreading_Perl - Fatal编程技术网

Multithreading 线程可以用来提高perl中哈希键匹配的速度吗?

Multithreading 线程可以用来提高perl中哈希键匹配的速度吗?,multithreading,perl,Multithreading,Perl,线程可以用来提高哈希键匹配的速度吗? 我有一个包含前100万alexa站点的散列。根据alexa哈希匹配~100个唯一主机所需的时间比我希望的要长得多。在什么地方/什么地方引入线程来加速这件事最合适 foreach my $host (keys %unique_hosts) { if ($host =~ /(([\w\-]+)\.([\w\-]+))$/) { my $domain = $1; $in_alexa++ if /$domain$/ ~~ %alexa

线程可以用来提高哈希键匹配的速度吗? 我有一个包含前100万alexa站点的散列。根据alexa哈希匹配~100个唯一主机所需的时间比我希望的要长得多。在什么地方/什么地方引入线程来加速这件事最合适

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 

对于每个主机,您要进行一百万个正则表达式匹配。这就是它慢的原因

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

我假设您正在尝试检查
$host
是否是
%alexa_站点
的键或
%alexa_站点
中键的子域

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

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

现在,您正在执行大约300个快速哈希查找,而不是100000000个慢速正则表达式匹配。

对于每个主机,您正在执行一百万个正则表达式匹配。这就是它慢的原因

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

我假设您正在尝试检查
$host
是否是
%alexa_站点
的键或
%alexa_站点
中键的子域

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

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

现在,您正在执行大约300个快速哈希查找,而不是100000000个慢速正则表达式匹配。

对于这样大小的哈希,您确定内存交换到磁盘时没有问题吗?如果是这样的话,再多的线程也不会加快磁盘I/O速度。在一百万条记录的情况下,它开始看起来像是一个具有相似查询的数据库会更好地工作。这才是真正需要数据库的地方,而不是散列。我可以建议吗?:)如果主机是
def.com
,并且
abcdef.com
%alexa\u站点的密钥,那么您真的想在
$in\u alexa
中执行
$in\u吗?如果哈希大小如此大,您确定将内存换出磁盘时没有问题吗?如果是这样的话,再多的线程也不会加快磁盘I/O速度。在一百万条记录的情况下,它开始看起来像是一个具有相似查询的数据库会更好地工作。这才是真正需要数据库的地方,而不是散列。我可以建议吗?:)如果主机是
def.com
并且
abcdef.com
%alexa\u站点的一个键,那么您真的要在
$in\u alexa
中执行
$in\u吗?