我有一个在Linux上运行的C++应用程序,我正在优化它.如何确定代码的哪些区域运行缓慢?
在早期的一个帖子之后,我把我的问题归结为它的问题,在从Perl脚本迁移到Python的过程中,我发现在Python中使用slurping文件存在巨大的性能问题.在Ubuntu Server上运行它.
注意:这不是一个X对Y线程,我需要从根本上了解它是如何实现的,或者我是在做一些愚蠢的事情.
我创建了我的测试数据,50,000个10kb文件(这反映了我正在处理的avg文件大小):
mkdir 1
cd 1
for i in {1..50000}; do dd if=/dev/zero of=$i.xml bs=1 count=10000; done
cd ..
cp -r 1 2
Run Code Online (Sandbox Code Playgroud)
尽可能简单地创建了我的2个脚本:
Perl的
foreach my $file (<$ARGV[0]/*.xml>){
my $fh;
open($fh, "< $file");
my $contents = do { local $/; <$fh> };
close($fh);
}
Run Code Online (Sandbox Code Playgroud)
蟒蛇
import glob, sys
for file in glob.iglob(sys.argv[1] + '/*.xml'):
with open(file) as x:
f = x.read()
Run Code Online (Sandbox Code Playgroud)
然后我清除了缓存并运行了我的2个slurp脚本,在每次运行之间我再次使用以下方法清理缓存:
sync; sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
Run Code Online (Sandbox Code Playgroud)
然后进行监控以确保每次都从磁盘读取所有内容:
sudo iotop -a -u me
Run Code Online (Sandbox Code Playgroud)
我在具有RAID …