我们正在向数据库插入一个包含 900 万个对象(文件 + 文件夹)的目录。我们使用的是 Java8 NIO2 Files.WalkFileTree 版本的多线程版本。
问题(我们真正需要帮助的地方是)我们使用 fork –join pool 进行线程管理。最大线程数设置为 1200。 - 最初在 preVisitDirectory - 为父目录创建线程,从而增加线程数。- 一旦线程数达到 1200。不会创建新线程。- 因此本质上是在不平衡的文件树中——逻辑归结为从某个点遍历单线程文件树。- 为父目录创建的线程只是坐等子目录返回。这是一种浪费。- 因此,在最初的高速率(以及高 CPU 使用率)之后,速率会下降。