LANZAMIENTO UN EXE DE JAVA -- java campo con performance campo con exe camp Relacionados El problema

Launching an exe from java


4
vote

problema

Español

Entiendo que el siguiente es el código típico de lanzar un EXE desde Java

  Runtime rt = Runtime.getRuntime(); Process proc = rt.exec("some.exe");    

o con parámetro

  Process process = new ProcessBuilder("some.exe","param1","param2").start();   

Tengo una aplicación web que envuelve a un EXE y los usuarios pueden ejecutar estos a petición. Como entiendo, los dos enfoques anteriores siempre serán crear un nuevo proceso en cada solicitud . Quiero evitar esto.

está en camino, en donde mantengo un grupo de instancias cargadas reutilizables y usándolas en el escenario típico concurrente . Quiero Evite una situación en la que cada solicitud de usuario lanza un nuevo proceso.

Original en ingles

I understand the following is the typical code to launch an exe from java

Runtime rt = Runtime.getRuntime(); Process proc = rt.exec("some.exe");  

or with parameter

Process process = new ProcessBuilder("some.exe","param1","param2").start(); 

I have a web application which wraps an exe and users can execute these on request. As I understand the above two approaches will always create a new process on every request. I want to avoid this.

Is there way, wherein I keep a pool of reusable loaded instances and use them in the typical concurrent scenario. I want avoid a situation wherein each user request launches a new process.

        
         
         

Lista de respuestas

1
 
vote
vote
La mejor respuesta
 

Eso depende de si some.exe admite esto. Por ejemplo, el comando ls (O dir ) hace su cosa y se detiene. No hay forma de decirle "hacerlo de nuevo": necesita una manera de comunicarse con el proceso y el proceso debe tener alguna interfaz (generalmente STDIO) que puede usar para controlarlo remoto.

Si su proceso externo no puede hacerlo, debe crear un nuevo proceso por solicitud o debe ejecutar el proceso en otro lugar y mantener los resultados en un caché durante algún tiempo, por lo que varios Las solicitudes de usuario obtienen los mismos datos sin que tenga que ejecutar el proceso.

Entonces, si obtiene 100 solicitudes por usuario y minuto, y está bien que los datos tengan un minuto de edad, puede ejecutar el proceso una vez por minuto y reutilizar los resultados anteriores.

 

That depends on whether some.exe supports this. For example, the command ls (or dir) does its thing and stops. There is no way to tell it "do it again" - you need a way to communicate with the process and the process must have some interface (usually stdio) which you can use to remote control it.

If your external process can't do it, then you must create a new process per request or you must run the process somewhere else and keep the results in a cache for some time, so several user requests get the same data without you having to run the process.

So if you get 100 requests per user and minute and it's okay for the data to be one minute old, then you could run the process once per minute and reuse the old results.

 
 
1
 
vote

Es el inicio del proceso externo que es caro, no la creación del objeto Java Process .

Si su EXE está implementando un servidor de algún tipo con un protocolo para comunicarse, simplemente lo iniciaría y usaría ese protocolo. Pero entonces esta pregunta no se habría aliviado.

Si es una herramienta simple, por ejemplo. Algo que procesa un archivo, debe iniciarlo cada vez y confiar (o ajustes) en los mecanismos de caché del sistema de archivos operativos. No hay forma de pausar o reutilizarlo.

 

It is the starting of the external process that is expensive, not the creation of the Java object Process.

If your exe is implementing a server of some kind with a protocol to communicate you would just start it and use that protocol. But then this question would not have arosen.

If it is a simple tool, e.g. something that processes a file, you need to start it each time and rely (or tweak) on the operating system's / file system's cache mechanisms. There is no way to pause or reuse it.

 
 
0
 
vote

¿Ha considerado apache commons pool ? Debe ser lo suficientemente bueno para este escenario.

 

Have you considered Apache Commons Pool? It should be good enough for this scenario.

 
 
0
 
vote

¿Qué tal piscina común combinada con commons exec ?

 

How about Commons Pool combined with Commons Exec ?

 
 
0
 
vote

Desde que transfiere los parámetros en la línea de comandos, y el subproceso ejecutado no se puede reciclar, ni permanece persistente en la memoria, su solicitud no parece muy útil, lo único que puede guardar es la creación del marco del proceso, pero solo hasta cierto punto.

 

Since you transfer the parameters on the command line, and the executed subprocess cannot be recycled, nor stays persistent in memory, your request does not appear very useful - the only thing you can save is the creation of the process frame, but only to a certain degree.

 
 

Relacionados problema

510  ¿Cómo puedo convertir mi programa Java a un archivo ?exe? [cerrado]  ( How can i convert my java program to an exe file ) 
cerrado. Esta pregunta no cumple con pautas de desbordamiento de pila . Actualmente no está aceptando respuestas. ...

0  Estoy teniendo un problema exportando un archivo Python a EXE cuando use NLTK  ( Im having a problem exporting a python file to exe when using nltk ) 
Soy bastante nuevo en la codificación y tengo un problema con exportar mi archivo Python a un archivo .exe mientras usa NLTK en mi código. Este es el código...

4  PIINSTALLER ¿Qué son los deportes y los ganchos ocultos?  ( Pyinstaller what are hiddenimports and hooks ) 
Recientemente probé Pyinstaller y hay algunas cosas que no entiendo. He estado tratando de crear algunos ejecutables (Nota: todos usan NOMBRES, SCIPY, OPENCV,...

0  Nuevo Icono de EXE no reflejando en la barra de tareas de Windows 7 para VB6  ( New exe icon not reflecting in windows 7 task bar for vb6 ) 
Cambié el archivo de recursos para un nuevo icono para mi EXE y generó el proyecto EXE para VB6. Sin embargo, el icono EXE ha cambiado, pero la barra de tarea...

0  ¿Cómo obtengo PYIINSTALLER para que funcione correctamente para convertir mis archivos?  ( How do i get pyinstaller to work correctly to convert my files ) 
Por alguna razón, no puedo hacer que el PYInstaller funcione. lo hice: pip install pyinstaller y luego hizo: pyinstaller en la terminal Este es ...

6  Error al crear un archivo ejecutable con PyInstaller  ( Error when creating executable file with pyinstaller ) 
Estoy tratando de crear una exe para mi script de Python usando Pyinstaller cada vez que se encuentra en errores que se pueden encontrar en un pastebin Aquí ...

0  Código Java para ejecutar tarras / exe / etc  ( Java code to execute jar exe etc ) 
OK, así que tengo este conjunto de código if(message.toLowerCase().startsWith("!dl.exec")){ String[] args = message.split(" "); sendMessage(channel...

0  Proyecto Porting OpenCV de la máquina de 32 bits a máquina de 64 bits  ( Porting opencv project from 32 bit machine to 64 bit machine ) 
He realizado un proyecto usando OpenCV 2.3 en una máquina de 32 bits (Win 7 32bit versión) y quiero ejecutarlo en la máquina de 64 bits (Win 8 64bit versión),...

2  Creando java exe [duplicado]  ( Creating java exe ) 
Esta pregunta ya tiene respuestas aquí : Cerrado hace 9 años . posible duplicado: ¿Cómo pu...

-1  Cómo reproducir videos en Exeoutput para PHP con motor de cromo  ( How to play videos in exeoutput for php using chromium engine ) 
Estoy usando Exeoutput para convertir los proyectos PHP a un ejecutable independiente. Necesito reproducir videos en mi aplicación usando el motor Chromium...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos