我理解以下是从java启动exe的典型代码
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("some.exe"); 或具有参数
Process process = new ProcessBuilder("some.exe","param1","param2").start();我有一个web应用程序包装了一个exe和用户可以执行这些请求。正如我所理解的,上述两种方法总是,在上创建一个新的流程,每个请求。我想避免这件事。
是否有方法,其中我保留一个可重用加载实例的池,并在典型的并发场景中使用它们。我希望避免每一个用户请求启动一个新进程的情况。
发布于 2012-02-14 13:33:34
这取决于some.exe是否支持这一点。例如,命令ls (或dir)执行其操作并停止。没有办法告诉它“再做一次”-你需要一种方式,与进程和进程必须有一些接口(通常是stdio),您可以使用它远程控制。
如果外部进程无法执行,则必须在每个请求中创建一个新进程,或者必须在其他地方运行该进程,并将结果保存在缓存中一段时间,因此几个用户请求不必运行该进程就可以获得相同的数据。
因此,如果每个用户和每分钟收到100个请求,并且数据有一分钟的时间是可以的,那么您可以每分钟运行一次进程,并重用旧的结果。
发布于 2012-02-14 13:29:46
外部进程的启动成本很高,而不是创建Java Process。
如果您的exe正在用协议实现某种服务器进行通信,您只需启动该协议并使用该协议即可。但这样的话这个问题就不会出现了。
如果它是一个简单的工具,例如处理一个文件的东西,您需要每次启动它,并依赖于(或调整)操作系统的/文件系统的缓存机制。没有办法暂停或重用它。
发布于 2012-02-14 13:21:51
你考虑过Apache共用池吗?对于这种情况,它应该足够好。
https://stackoverflow.com/questions/9277528
复制相似问题