gpt4 book ai didi

multithreading - 如何优化Perl代码以使用线程或并行进行负载测试

转载 作者:行者123 更新时间:2023-12-03 13:19:39 27 4
gpt4 key购买 nike

嗨,对于基本的负载测试,我准备了下面的Perl代码,即将大约10000个文件插入了系统。但是,我无法在所需的位置获得性能。就像我说的,我不在乎它是否使用100%CPU。我的目标是在1秒内推送10000个文件。有没有更好的方法在Perl中编写此脚本(借助线程或并行)。

#!/usr/bin/perl
my $directory= "/home/Documents/File";
chdir $directory;
opendir(DIR, ".") or die "couldn't open $directory: $!\n";
foreach my $file (readdir DIR){
my $cmd = "ft -MI -NMM -P 500 -f $file -d.";
system ( "cat","$cmd");
close $in_fh;
}
close DIR;

最佳答案

您是在误解下进行操作。并行代码的作用是允许您同时使用多个CPU。这意味着对于CPU密集型工作负载,您可以提高性能-任务之间的解耦越多,扩展性就越好。

但是,您的任务是读取文件系统。看起来您没有做比目录遍历和读取更复杂的事情。

这样做的限制因素几乎肯定是磁盘子系统,因此并行性丝毫不会帮助您。确实,这可能会使情况变得更糟-因为大多数磁盘 Controller 可以检测到顺序访问模式并进行预取,但是如果您通过并行化对它进行伪随机化,那么它就不可能那么有效。

所以-简短的答案是不要打扰,因为您不会获得太多 yield 。

您可能要考虑不进行系统调用来运行cat,而仅使用perl的open可以加快您的速度。大概。

您还应该始终use strict;use warnings;-尤其是在发布到Stack Overflow之前,因为它们将帮助您发现一些更明显的错误情况。

例如:

Global symbol "$in_fh" requires explicit package name at file.pl line 10.

甚至在考虑并行性之前,您都需要弄清基本错误。并行代码非常酷,但是如果您的代码一开始就很伪劣,那么调试它也是一个噩梦。

关于multithreading - 如何优化Perl代码以使用线程或并行进行负载测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28962672/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com