Foros del Web » Programación para mayores de 30 ;) » Java »

Java en multiproceso

Estas en el tema de Java en multiproceso en el foro de Java en Foros del Web. Hola a todos, Tengo una duda bastante existencial. Estoy desarrollando una aplicación en java, y tiene muchas tareas simultaneas (sobre unas 500 aproximadamente calculando como ...
  #1 (permalink)  
Antiguo 19/07/2010, 05:33
 
Fecha de Ingreso: septiembre-2006
Mensajes: 4
Antigüedad: 18 años, 1 mes
Puntos: 2
Java en multiproceso

Hola a todos,

Tengo una duda bastante existencial. Estoy desarrollando una aplicación en java, y tiene muchas tareas simultaneas (sobre unas 500 aproximadamente calculando como cab..). Mi problema es que tengo un ordenador con 4 procesadores y tengo entendido que java con green Threads solo es capaz de aprovechar 2 procesadores simultaneamente. ¿Es eso cierto?. Estoy planteandome hacerlo con procesos en caso de que no pueda, (el desarrollo es sobre debian), pero es muy costoso en rendimiento de esta manera y mas siendo procesos java pequeñitos que tienen que cargar una jvm cada uno... Lo bueno de esta arquitectura es que no me limitaria a java, podria implementar algunos en C, C++, Python, Ruby, Earlang ... en caso de que tuviera un cuello de botella, pero seria un poco menos uniforme la aplicación.... Otra opción es hacer todo con Earlang... pero conlleva varios riesgos....(perdida de algunas librerias, wrappers de librerias java más pesados, pufff) y un paron en el desarrollo considerable.... aunque al ser mia me la suda...

¿Alguna sugerencia? y sobre todo. ¿Seguro que un proceso java con multihilo solo puede aprovechar 2 procesadores como máximo?. Que solo pueda utilizar 1 me pareceria de lo más normal... pero ya que se pone... que se limite a 2 me parece raro, raro, raro... Otra opción es que le den morcilla a los otros 2 procesadores y que se queden para el sistema operativo y el resto de procesos del sistema y si algun dia tengo que escalar que sea enganchandole más maquinas horizontalmente.....


Un saludo, gracias por adelantado y perdonad mi pobre grámatica...
  #2 (permalink)  
Antiguo 19/07/2010, 06:28
 
Fecha de Ingreso: septiembre-2006
Mensajes: 4
Antigüedad: 18 años, 1 mes
Puntos: 2
Respuesta: Java en multiproceso

¿Alguien a probado Scala?
  #3 (permalink)  
Antiguo 19/07/2010, 11:24
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 21 años, 1 mes
Puntos: 51
Respuesta: Java en multiproceso

Scala acaba produciendo bytecode, el cual corre sobre la misma Maquina Virtual Java, así que el comportamiento en cuanto a uso de procesadores, procesos nativos etc. es exactamente el mismo.

Lo de que Java no pueda usar mas de dos procesadores aunque use green threads no lo había oido, puede ser cosa de la implementación de Debian, pero bueno, como dices tu tampoco va a usar los 4 a pleno rendimiento por que el S.O. y demás tambien tienen que vivir .

¿Has probado que realmente tu problema de rendimiento es ese? Por que, por ejemplo, si tienes 500 operaciones de vida muy corta, quizá el cambio de contexto entre procesos nativos te sea más costoso que utilizar un numero adecuado de threads en un proceso normal de la JVM y no acabes ganando mucho. Y si los procesos son muy intensivos en consumo de CPU y pones los 4 nucleos al 100%, puedes dejar a la maquina "seca" y hacerla ir mas lento que si le dejas alguna CPU libre para hacer el resto de trabajo.

Así a bote pronto, lanzar 500 threads simultaneos no parece buena idea. Muchas veces es mejor usar un pool de X (bastante menor que el numero de tareas a realizar) y que vayan haciendo de la cola de tareas pendientes a medida que acaben, en vez de todos a la vez.

Por ejemplo, yo tengo un proceso que ha de hacer ~20.000 peticiones a una aplicacion web para guardar el resultado en fichero. En mi caso el número mágico es sólo 3 threads. Si pongo 4 o más acabo más tarde. Pero para saberlo hay que probarlo por que depende de muchas cosas, especialmente del tipo de tarea y los recursos que necesita.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #4 (permalink)  
Antiguo 19/07/2010, 14:17
 
Fecha de Ingreso: noviembre-2006
Mensajes: 56
Antigüedad: 18 años
Puntos: 1
Respuesta: Java en multiproceso

Hola, puedes probar Java Visualvm que sirve para monitorizar y detectar problemas de rendimiento en aplicaciones Java, proporciona información sobre el consumo de memoria, hilos, CPU, etc. Más info en https://visualvm.dev.java.net/

Un Saludo.

Etiquetas: multiproceso, scala
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 16:36.