3

我编写了一个应用程序,它必须从数千个大型 docx 文件中解析和检索一些数据。它将在具有许多 CPU、大量 RAM 和 RAID 阵列中的快速 SSD 的高性能生产服务器上运行,因此显然我想充分利用所有可用的性能能力。

我发现我的应用程序在许多并发线程中成功地完成了任何其他工作,但它无法使用 docx4j 库同时解析许多 docx 文件。此外,这个库不能在许多单独的线程中安全地支持多个 WordprocessingMLPackage 类的实例,该类包含来自 docx 文件的数据。

谷歌搜索和检查库的源代码确认它完全不是线程安全的(例如,它的类包含许多不能同时使用的静态字段和实例)。

所以我有一些问题要问:

  • 是否有任何其他具有相同功能的库可以保证是线程安全的?
  • 我可以在一些单独的进程而不是单独的线程中启动我的工作人员来解决这个问题吗?如果是这样,它会降低我的应用程序的性能有多严重?
4

1 回答 1

4

我不知道替代的线程安全库。

在单独的进程中启动您的工作人员是一种可行的解决方法 - 启动成本会比使用单独的线程更高,但如果您有大量文件要处理,这可能不会很重要。您需要某种方式让进程进行通信,一种选择是使用Redis - 使用SETNX将文件名自动添加到键值存储中,如果设置成功,则工作人员可以处理该文件,如果设置不成功,然后另一个进程已经在处理该文件。另一种选择是让管理进程通过套接字将文件分配给工作进程。

于 2013-06-05T14:15:39.737 回答