multithreading - 运行 Speedy 或 PersistentPerl 的多个副本以从 Tomcat 调用

标签 multithreading perl tomcat

我有一个在 Tomcat 下运行的现代网络应用程序,它经常需要调用一些遗留的 perl 代码来获得一些结果。现在,我们将它们包装在对 Runtime.getRuntime().exec() 的调用中,它运行良好。

然而,随着 webapp 变得越来越繁忙,我们注意到 perl 经常超时,我们需要控制它。

我正在使用 commons-pool 来确保一次只能运行 X 个副本,线程会在需要时很好地排队等待 perl 实例,在 Y 之后超时秒并返回错误(这很好,客户端将重试)。

但是我们仍然存在 Perl 启动、解释脚本、执行和返回需要很长时间的问题。在繁忙的时候,我们每秒执行 30-50 次。这是一台强大的机器,但它开始挣扎了。

我已经阅读了 SpeedyPersistentPerl 并且正在考虑为我的池中的每个对象在内存中保留一个副本,这样我们就不需要每次打开和关闭 Perl。

这是个好主意吗?有关如何执行此操作的任何提示?

最佳答案

这些方法应该可以减少脚本启动时的开销。如果该脚本可以作为 CGI 程序运行,那么您最好提供让它与 Plack 一起使用。并使用 PSGI 服务器运行它。您的 Tomcat 应用程序可以收集请求参数并将其发送到您的脚本和/或在后台运行的“网络应用程序”。

关于multithreading - 运行 Speedy 或 PersistentPerl 的多个副本以从 Tomcat 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26972362/

相关文章:

multithreading - 如果您解锁一个已经解锁的互斥锁,行为是否未定义?

perl - 使用 Perl 获取所有可能的字符串组合

regex - 删除空格 : Unicode properties - character classes

tomcat - 无法访问 Solr 管理面板 - HTTP 状态 403

maven - Jersey Web 应用程序的 Docker 镜像

java - 带有发送器的生产者消费者

c# - 如何在给定点停止线程?

java - Executorservice 的行为需要解释

perl - 什么是用于各种人类语言的语音表示的好包?

java - Java Cookie.setMaxAge(0) 的行为取决于实现还是有规范?