从java启动exe

从java启动exe,java,performance,exe,Java,Performance,Exe,我知道下面是从java启动exe的典型代码 Runtime rt = Runtime.getRuntime(); Process proc = rt.exec("some.exe"); 或带参数 Process process = new ProcessBuilder("some.exe","param1","param2").start(); 我有一个web应用程序,它包装了一个exe,用户可以根据请求执行这些程序。据我所知,上述两种方法将始终在每个请求上创建一个新流程。我想避免这种情况

我知道下面是从java启动exe的典型代码

Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("some.exe"); 
或带参数

Process process = new ProcessBuilder("some.exe","param1","param2").start();
我有一个web应用程序,它包装了一个exe,用户可以根据请求执行这些程序。据我所知,上述两种方法将始终每个请求上创建一个新流程。我想避免这种情况


有没有办法,让我保留一个可重用的加载实例池,并在典型的并发场景中使用它们。我希望避免每个用户请求启动一个新流程的情况

你考虑过吗?对于这种情况,它应该足够好了。

与之结合如何?

代价高昂的是外部进程的启动,而不是Java对象
进程的创建

如果您的exe正在实现一个具有通信协议的某种服务器,您只需启动它并使用该协议即可。但这样的问题就不会有阿罗森了


如果它是一个简单的工具,例如处理文件的工具,那么每次都需要启动它并依赖(或调整)操作系统/文件系统的缓存机制。无法暂停或重复使用它。

由于您在命令行上传输参数,并且执行的子流程无法回收,也无法在内存中保持不变,因此您的请求似乎不是很有用-您唯一可以保存的是创建流程框架,但仅在一定程度上。

这取决于
某些.exe是否支持此功能。例如,命令
ls
(或
dir
)执行其操作并停止。没有办法告诉它“再做一次”——你需要一种与进程通信的方式,进程必须有一些接口(通常是stdio),你可以用它来远程控制它

如果您的外部进程不能做到这一点,那么您必须为每个请求创建一个新的进程,或者您必须在其他地方运行该进程,并将结果保存在缓存中一段时间,以便多个用户请求获得相同的数据,而无需运行该进程


因此,如果您每用户每分钟收到100个请求,并且数据只有一分钟的时间,那么您可以每分钟运行一次进程并重用旧的结果。

您是否尝试过是否存在任何实际开销,或者您的java运行时是否已经将其合并?您的EXE是否支持同时运行?如果典型的EXE只需要一个运行、执行和终止周期,您如何避免创建进程?这可能会变成线程化nightmare@eznme,当我执行上述任何代码时,我看到在任务管理器中创建了多个实例。我不知道want@Santosh,记事本不支持您需要的内容。我甚至没有说正确的方式,因为这是不可能的。