im4java 中的进程池



伙计们在我的项目(java)中使用imagemagick库进行图像处理。当多个请求到达服务器时,它的响应速度非常慢。现在,多个convert命令(作为单个进程执行)同时执行,为了避免延迟,我想到了im4java中的process pooling。以下替代方案会有所帮助吗?:

  • im4java 中的进程池 - 有没有办法只在 im4java 中实现(我应该使用 gm4java 包装器,我想它支持进程池 - 但是,它几乎没有限制,比如不使用缓冲图像)?
  • 专用服务器 - 仅使用专用服务器进行图像处理(我至少想要)。

我应该选择其他方法吗?提前感谢您的帮助!

实际上,我们的团队经历了完全相同的要求,因此我们创建了gm4java。它完全符合您的需求。至于对 BufferedImage 的支持,我们已经支持在最新版本中使用 BufferedImage 作为输入。仍然不支持使用缓冲图像作为输出,但您可以轻松解决它。

解决方法是让GM将映像写入RAM磁盘(在许多Linux发行版中,您可以免费获得RAM磁盘,对于Windows,有多种解决方案可用)。您现在需要做的就是让您的 Java 代码从 RAM 磁盘读取转换后的映像。与每次启动新进程的巨大开销相比,小开销(如果有的话)是无动于衷的。

即使直接与 RAM 磁盘方法的缓冲图像方法进行比较,BufferedImage 的大小通常比 JPG 图像文件的字节数组大 10 倍。因此,如果您只需要提供图像而不是在 Java 中进行额外的处理,那么 RAM 磁盘方法确实更快,并且使用更少的内存。

更多关于im4java中当前BufferedImage实现的信息。当使用它作为输入时,它只是简单地写入tmp文件,这非常慢。当使用它作为输出时,它利用stdin/stdout流操作,这比tmp文件更快,但仍然不是最佳的。最好是在Java NIO实现中使用命名管道。但这需要相当多的,最像API破坏,im4java的更改。

最后,我不认为gm4java

是im4java的包装器,gm4java的核心是独立运行的,它使你能够向GM发送大量并发命令,并将GM的输出返回给你。命令只是一个字符串列表,所以如果你知道如何编写 GM 命令,你不需要 im4java 来使用 gm4java。这实际上是我们在需要原始性能的应用程序中的使用方式。im4java 为您提供了一种方便的方法(有一些开销)来构造 GM 命令并解析 GM 输出。gm4java 中的 GMBatchCommand 类在 im4java 和 gm4java 之间架起了一座桥梁。它允许您使用 im4java 的便利来构造命令,然后使用 gm4java 引擎来执行命令。gm4java引擎使用与im4java完全不同的机制来管理和与GM通信。这就是它如此之快的原因。

相关内容

  • 没有找到相关文章

最新更新