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