所以我在使用线程支持编译的核心2 duo macbook pro上运行perl 5.10:usethreads = define,useithreads = define.我有一个简单的脚本来读取4个gzip文件,每个文件包含750000行.我正在使用 Compress::Zlib进行解
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硬盘上竞争磁盘访问,那么这会大大减慢速度.磁盘头必须快速连续移动到不同的文件.如果您一次只处理一个文件,则磁头可以保持在该文件附近,并且磁盘缓存将更准确.