当前位置 : 主页 > 网络安全 > 测试自动化 >

性能 – 当我使用线程时,为什么我的Perl脚本会慢慢解压缩文件?

来源:互联网 收集:自由互联 发布时间:2021-06-22
所以我在使用线程支持编译的核心2 duo macbook pro上运行perl 5.10:usethreads = define,useithreads = define.我有一个简单的脚本来读取4个gzip文件,每个文件包含750000行.我正在使用 Compress::Zlib进行解
所以我在使用线程支持编译的核心2 duo macbook pro上运行perl 5.10:usethreads = define,useithreads = define.我有一个简单的脚本来读取4个gzip文件,每个文件包含750000行.我正在使用 Compress::Zlib进行解压缩和读取文件.我有2个实现,它们之间的唯一区别是包括使用线程.除此之外,两个脚本都运行相同的子程序来进行读取.因此,在伪代码中,非线程程序执行此操作:

read_gzipped(file1);
read_gzipped(file2);
read_gzipped(file3);
read_gzipped(file4);

线程版本如下:

my thr0 = threads->new(\$read_gzipped,'file1')
my thr1 = threads->new(\$read_gzipped,'file1')
my thr2 = threads->new(\$read_gzipped,'file1')
my thr3 = threads->new(\$read_gzipped,'file1')

thr0->join()
thr1->join()
thr2->join()
thr3->join()

现在,线程版本的运行速度几乎比非线程脚本快2倍.这显然不是我希望的结果.谁能解释我在这里做错了什么?

我的猜测是GZIP操作的瓶颈是磁盘访问.如果您有四个线程在platter硬盘上竞争磁盘访问,那么这会大大减慢速度.磁盘头必须快速连续移动到不同的文件.如果您一次只处理一个文件,则磁头可以保持在该文件附近,并且磁盘缓存将更准确.
网友评论