问题描述
粗略的解决方案是一次读取一个块,然后休眠,例如10k,然后休眠一秒钟。但是我要问的第一个问题是:为什么?有两个可能的答案:
- 您不希望创建工作比完成任务快。要么
- 您不想在系统上造成太大的负担。
我的建议是不要在读取级别上对其进行控制。这有点混乱和不准确。而是在工作结束时对其进行控制。Java有很多出色的并发工具可以解决这一问题。有几种替代方法可以做到这一点。
我倾向于喜欢使用生产者消费者模式来解决此类问题。它为您提供了具有报告线程等功能来监视进度的绝佳选择,并且它可能是一个非常干净的解决方案。
诸如ArrayBlockingQueue之类的东西可以用于(1)和(2)所需的限制类型。由于容量有限,读取器最终将在队列已满时阻塞,因此不会很快填满。可以控制工人(消费者)仅工作得如此之快,从而也限制了覆盖率(2)。
解决方法
是否存在有关如何以一定速率读取长文件的文章/算法?
说我不想在发出读取数据时以每秒10 KB的速度通过。