可以使用线程来提高哈希键匹配的速度吗? 我有一个包含前 100 万个 Alexa 网站的哈希值。将 ~100 个唯一主机与 Alexa 哈希进行匹配所需的时间比我希望的要长得多。什么/哪里是引入线程来加速这件事的最合适的方式/位置?
foreach my $host (keys %unique_hosts) {
if ($host =~ /(([\w\-]+)\.([\w\-]+))$/) {
my $domain = $1;
$in_alexa++ if /$domain$/ ~~ %alexa_sites;
}
}
编辑:内存看起来不错。
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_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,000,000 次缓慢的正则表达式匹配。
关于multithreading - 可以使用线程来提高 Perl 中哈希键匹配的速度吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24558840/