我对Spring批处理框架非常陌生。
我目前正在与读者和作家一起写一批。
读取器从Db读取,而写入器则写入平面文件。记录的数量为100万。写文件需要很长时间,我想在这方面有所改进。
在作者中实现多线程以便write()方法并行运行的最佳方式是什么?
注意:在@BeforeStep和@AfterStep回调中,我正在编写文件的页眉和页脚。write()方法将记录写入文件。
编辑:
我发现,写到文件并不需要太多的时间,但我们的内部方法之一,做某种形式的解密需要500毫秒左右的1条记录。我们有100万这样的记录。
我可以通过在多个线程中进行解密来提高性能吗?从现在开始,我无法理解如何改进。
发布于 2016-09-16 02:31:08
这并不是春季的具体问题。通常情况下,人们所做的就是实现某种流。因为您不阅读整个查询,然后编写所有内容,而是一个接一个地读取一些小数据,然后将每个比特传递给作者,这样它就可以在您完成阅读之前开始编写了。这样做更快,而且还可以使您不再使用那么多内存。例如,如果您有10 of的数据要读写,则可以将其拆分为10 of的查询,而不是读取整个10 of的数据。你应该在溪流上读读。但是,对同一文件的并行写入不会带来任何好处,也不会降低性能。你也应该小心不要启动太多的线程,这同样会降低性能,除非你的线程真的很便宜,否则我建议不要制作超过2个线程,因为一些人已经提到,大多数应用程序的性能都是I/O绑定的,没有办法解决这个问题,只有通过缓冲/流/缓存而不是阻塞线程,或者在应用程序中可以做的任何其他事情来减轻效果。
https://stackoverflow.com/questions/39522486
复制相似问题