2010-06-06 29 views
0

我在磁盘中有一个压缩文件,即一个分区块。我从磁盘读取一个块,将其解压缩到内存并读取数据。生产者/消费者 - I/O磁盘

可以创建一个生产者/消费者,一个线程从磁盘恢复压缩块并放入队列,另一个线程解压缩并读取数据?

性能会更好吗?

谢谢!

回答

0

是的,可以这样设置它。无论你是否会看到性能改进都完全依赖于机器,解压缩数据的确切性质等等。如果它不是太麻烦,而且你的数据集很丰富,我会建议你这样做,测量看看它是否更快。如果没有其他的东西,它就像你需要做的工作来利用某种map-reduce框架。

+0

地图缩小是针对计算机集群的。就我而言,我只有一台机器。我如何使用它? 谢谢 – 2010-06-08 13:10:58

+0

虽然Map/Reduce很受欢迎,因为它允许使用群集轻松进行水平伸缩,所以完全可以在单节点配置中使用它。看看这篇[关于单节点Hadoop的文章](http://hadoop.apache.org/common/docs/current/quickstart.html)。 – 2010-06-08 14:34:24

1

我怀疑解压缩数据的线程将花费大部分时间等待从磁盘读取压缩块的线程。

如果受CPU限制的解压缩花费的时间超过从磁盘读取块的IO限制,我会感到惊讶。

+0

这一切都取决于您使用的磁盘和压缩,例如解压gzip文件到目前为止我们的服务器上绑定了cpu。 – nos 2010-06-06 23:53:41

+0

这就是要点。如果我使用大量压缩,解压缩线程可能不会等待I/O线程,然后我将获得性能提升。 – 2010-06-07 09:47:18