|
|
1
1
如果你: a)可以修改源代码。 我建议您创建一个长时间运行的进程,并将其公开为WebService。这样,进程将只在那里等待调用。 b)有源代码/头,但不能修改。 也许一个好主意是将它集成为库并用JNI或JNA从Java调用它,尽管这可能是非常痛苦的。 c)没有源代码或无法修改。 然后没有太多的选项,您必须创建一个线程队列,然后从那里限制进程的创建。 |
|
|
2
1
如果启动C++应用程序花费的时间太长,那么几乎肯定的是,您将不得不编写一些C++代码来避免这种情况。 一种选择是用合适的API将C++重构为库,并使用JNI或JNA从Java调用API。然而,JNI/JNA很难使用,并且有破坏JVM的倾向。当出现问题(例如,您的JVM崩溃)时,调试是困难的。 一个更好的选择是重构C++应用程序作为守护进程。将“主”入口点替换为循环中执行以下操作的代码:
如果使用管道,可以使用Java WebApp启动C++应用程序。
您需要考虑的一个问题是多线程。您的Web容器(运行WebApp的东西)默认情况下可能是多线程的,因此您需要实现Java端来处理C++端的多线程或单线程特性。这可能是简单的,使得Java端对象被用来用同步方法来请求一个单独的对象。然而,这可能是性能瓶颈。 |
|
3
1
JAVA中的节流可以使用合适的执行器来完成。在执行器中有很多容易获得的——我认为固定大小的线程池正是您所需要的。 |
|
|
4
0
有多少过程“太多”?我建议在继续之前先衡量一下表现。在这种情况下,您可以无问题地启动和运行更多的进程,这比您预期的要多,尤其是因为程序的代码将在所有实例的内存中共享。 |
|
|
user29759326 · 如何返回递归函数中的最后一个值? 1 年前 |
|
|
malife89 · 将java中的字符串读取为正确的日期格式 1 年前 |
|
|
Tim · 在java中,有没有更快的方法将字节数组写入文件? 1 年前 |
|
|
rudraraj · java中未声明最终变量 1 年前 |
|
|
Bala Ji · 以下BFS的实施效率如何? 1 年前 |