0

我正在使用 Ghost4J 本机库 32 位和 64 位 dll 文件将我的 PDF 转换为图像。我需要将它与 ThreadPoolExecutor 即多线程一起使用,但由于它是本机的,它经常使我的 JBoss 崩溃。

在我同步使用这个库后,线程表现不佳。即有4个线程和8个线程,它在性能上没有区别。

有什么安全的方法可以做到这一点吗?

4

1 回答 1

1

您是否尝试过 ghost4j 推荐的多线程:

多线程

第一步是确保 Ghostscript 是线程安全的。但是如果 Ghost4J 被用于多线程/多用户环境(例如在 webapp 中)呢?

如果使用 Ghost4J 编写文档转换 webapp,如果用户必须等待先前的用户请求完成,那么使用单个 Ghostscript 解释器可能是一个真正的问题。

为了克服这个限制,Ghost4J 在其高级 API 组件上提供了多线程支持(从 0.4.0 版开始)。

怎么可能?: 组件处理发生在不同的 JVM 中。

主 JVM 中的组件能够启动其他 JVM(在其他系统进程中运行)并使用 cajo 库(嵌入在 ghost4j JAR 文件中)控制它们。

为了确保可以从主 JVM 创建从属 JVM,请检查是否可以使用 java 命令从命令行启动 Java。

可以通过在组件上设置 maxProcessCount 属性来控制多线程行为(如果可用):

  • 当 = 0:禁用多线程。组件在开始处理之前必须等待 Ghostscript 解释器释放。

  • 当 > 0:启用多线程。组件处理不会在主 JVM 中进行,而是在从属 JVM 中进行。赋予 maxProcessCount 的值表示该组件可以同时运行多少个从属 JVM。当达到从属 JVM 的最大数量时,新的处理请求将等待另一个处理完成。

以下是如何设置 PDFConverter 组件以允许使用 2 个从属 JVM 进行多线程:

//create converter
PDFConverter converter = new PDFConverter();

//set multi-threading
converter.setMaxProcessCount(2);

ghost4j - 线程安全和多线程

于 2013-07-16T12:24:09.373 回答