可以使用线程来提高散列键匹配的速度吗? 我有一个包含前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
答案 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万次慢速正则表达式匹配。