Rud*_*ger 8 java parallel-processing gzip multicore gzipinputstream
我在我的程序中使用GZIPInputStream,我知道如果我可以让Java并行运行我的程序,性能会有所帮助.
通常,标准VM是否有一个命令行选项可以在许多内核上运行?它只运行一个.
谢谢!
编辑
我正在Windows XP上运行普通的'Java SE 6更新17'.
将GZIPInputStream放在一个单独的线程上显然会有帮助吗?没有!不要将GZIPInputStream放在单独的线程上!不要多线程I/O!
编辑2
我想I/O是瓶颈,因为我正在读写同一个磁盘......
但总的来说,有没有办法让GZIPInputStream更快?或者是并行运行的GZIPInputStream的替代品?
编辑 我使用的3个代码片段:
GZIPInputStream gzip = new GZIPInputStream(new FileInputStream(INPUT_FILENAME));
DataInputStream in = new DataInputStream(new BufferedInputStream(gzip));
Run Code Online (Sandbox Code Playgroud)
Uri*_*Uri 16
AFAIK从此流中读取的操作是单线程的,因此如果您正在读取一个文件,则多个CPU将无法帮助您.
但是,您可以拥有多个线程,每个线程都解压缩不同的文件.
话虽这么说,解压缩目前并不是特别计算密集,你更有可能被IO的成本所阻挡(例如,如果你正在HD的两个不同区域读取两个非常大的文件).
更一般地说(假设这是一个Java新手的问题),Java不会为您并行做事.您必须使用线程来告诉它您要执行的工作单元以及如何在它们之间进行同步.Java(在操作系统的帮助下)通常会占用尽可能多的内核,并且如果线程多于内核(通常是这种情况),也会在同一内核上交换线程.
小智 6
PIGZ = GZip的并行实现是gzip的全功能替代品,它在压缩数据时利用多个处理器和多个核心.http://www.zlib.net/pigz/ 它还不是Java--任何参与者.当然,世界需要Java.
有时压缩或解压缩是一个很大的CPU消费者,虽然它有助于I/O不成为瓶颈.
另请参阅HP Labs的数据库(C++).PIGZ仅对压缩进行并行化,而Dataseries将输出分解为大型压缩块,这些块可并行解压缩.还有许多其他功能.