最近使用Java做了个小小的多线程的zip工具,测试了一下:
测试文件夹包含7307个文件,104的目录,大小246 MB,占用空间402 MB,测试电脑为Inter Pentium Dual CPU E2180 2GHz,896M内存,硬盘5400转
单线程:26047ms(和使用WinRAR压缩文件夹为zip格式速度差不多)
双线程:19328ms
三个线程:14328ms (速度最快)
四个线程:14953ms
五个线程:30641ms (速度最慢)
测试机在运行五个线程时鼠标反应迟钝,硬盘狂响,压缩文件主要瓶颈在硬盘,zip压缩很耗CPU,但是压缩好的数据写盘迟钝造成线程开到一定数目性能直线下降,稍后会在四核机器上对更大的文件夹进行测试!
压缩时间可减少一半,对这个结果不是特别满意,zip压缩后数据的写盘算法再改进一下,看能否进一步提升!
近期会完善这个工具,适当时候发布!
2011年10月18日更新:
增加了输出流的Buffer到1M,3个线程针对上述的文件夹压缩时间缩短到9秒,由于目前的压缩工具是将文件夹按照线程数目分块压缩,所以有几个线程就压缩为几个文件,默认按照当前电脑的CPU数目分块,单CPU的机器最少用两个线程,3个线程压缩可通过-n3在命令行输入,源代码还在变化中,现提供当前的源代码,这个工具目前很简陋,请各路高手多提宝贵意见:
jzip-1.0.zip(包含源代码)