gpt4 book ai didi

java - 随着线程数的增加,硬盘写入文件变慢

转载 作者:行者123 更新时间:2023-11-30 08:58:51 25 4
gpt4 key购买 nike

我正在使用 ExecutorService 创建一个多线程环境。我所有的线程都在做同样的事情。他们从数据库中获取数据,使用 itext 准备 PDF 并在 D 驱动器中的某个位置写入 PDF。但我注意到一件奇怪的事。当我增加线程数时,我的端到端进程变慢了。对于 1 个线程 - 1 小时内生成 4000 个 pdf对于 2 个线程 - 1 小时内生成 3500 个 pdf对于 3 个线程 - 1 小时内生成 3200 个 pdf对于 4 个线程 - 1 小时内生成 3000 个 pdf

使用记录器,很明显,从数据库中获取数据非常快,瓶颈是PDF写入操作。

我在某处读到,在 Windows 中,与顺序写入相比,同时在同一目录中写入多个文件变得更慢。如果为真,我可以实现哪些其他逻辑来获得更高的性能。谢谢。

环境细节

操作系统 - Windows 7 ,32 位内存 - 3 GB处理器 - 酷睿 i3JDK-1.6数据库-PostgreSql 9.3PDF 的大小 - 在 500KB 到 2MB 之间变化

最佳答案

HDD 一次只能写入磁盘的一个部分,因此如果您有多个不同的线程(甚至进程)同时写入,磁盘必须到处移动磁头,写入一个一点到这里的文件 A,一点到那里的文件 B,等等。这就是为什么将这个任务拆分成线程实际上的原因,你让 HDD 工作得更努力。

如果您有任何 CPU 密集型任务,它们可以经常跨几个线程进行多路复用,以在任何现代 CPU 上获得优势,但是一旦您处理单个资源(如特定 HDD),您对于您正在做的事情的那个方面,通常最好坚持使用一个线程。

关于java - 随着线程数的增加,硬盘写入文件变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27480314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com