我正在尝试将非Java可执行文件集成到服务器端(Linux)上的Java Webapp中.
有关可执行文件的一些详细信息:
用C写.该可执行文件从stdin或文件中获取一些输入,并生成一个输出文件.该可执行文件并非设计为长时间运行的进程,即它生成输出然后消失.
尽管为可执行文件启动单个进程非常便宜,但对其执行的调用次数可能很多.这可能会导致产生太多进程,从而可能降低服务器性能.
如何围绕此exe编写一些包装程序或实用程序(使用Java),以使我可以高效地运行
>我的Java应用程序中的一个线程
>长期运行的外部流程
PS:我知道我可以使用Java中的Runtime或ProcessBuilder来启动外部进程,并且可能使它成为多线程并使用一些排队,但这不能解决反复启动进程的问题.
解决方法:
如果你:
a)可以修改源代码.
我建议您创建一个长期运行的过程并将其公开为Web服务.这样,进程将只坐在那里等待被调用.
b)有源代码/标题,但是您不能修改它.
一个好主意可能是将其集成为库,并使用JNI或JNA从Java调用它,尽管这可能很难.
C)没有源代码或无法修改它.
然后没有太多选择,您必须创建一个线程队列,然后从那里限制进程的创建.