我有一个要求,我需要读取文本文件然后对其进行转换并将其写入其他文件。我希望以并行方式执行此操作,例如一个线程用于读取,一个用于转换,另一个用于写入。
现在要在线程之间共享数据,我需要一些通道,我正在考虑使用BlockingQueue
它,但如果可用的话,我想探索一些其他(更好的)替代方案。
Guava 有一个EventBus
但不确定这是否适合该要求。从性能的角度来看,还有哪些其他替代方案可用,以及哪一个是最好的。
问问题
300 次
1 回答
2
除非您的转换步骤非常密集,否则这可能是浪费时间。
这样想吧。你在问什么?
你要的东西
- 接收传入的数据流
- 将其复制到另一个线程
- 将其作为传入的数据流呈现给该线程
哪种数据结构最能代表第 3 步的传入数据流?(提示:这是您开始使用的 InputStream!)
前两个步骤增加了什么价值?“转换”线程可以像通过另一个线程从磁盘读取一样快地从磁盘读取。在其间添加线程不会加快磁盘读取速度。
你会开始考虑添加另一个线程
- 您的问题可以有效地划分为独立的工作部分(例如,每个线程处理一段文本
- 将问题分解为这些工作的成本明显低于添加额外线程并在它们之间进行协调的开销(很小,但不是免费的!)
- 该问题需要比单个 CPU 提供的更多资源(线程可以让您访问更多 CPU 资源,但在 I/O 吞吐量方面没有提供太多价值)
于 2012-02-08T08:10:18.307 回答