viernes, 7 de diciembre de 2007

Java 1.5/1.6 es Multi-core

SI, definitivamente Java escala con el número de “cores” y lo hace bien. No Había tenido tiempo de revisar, si no hasta ahora, si tenía o no la capacidad de escalar, sabiendo que los procesadores multi-core son populares... o mejor dicho “ya son de todos”.

Cumplo mi tarea en desarrollo de software sobre una estación de trabajo Sun Ultra 40 con SuseLinux 10.3, lo que me permite observar muy detalladamente que ocurre con Java, pues más de un foro señalaba la imposibilidad de escalamiento debido al modelo de memoria de JVM (noticia que parece confirmarse para versiones anteriores a la 1.5).

El problema me resultaba relativamente nuevo. Si bien he hecho programación multi-thread desde hace algunos años, no me había preocupado del tema hasta que debí evaluar el desempeño de un modelo matemático en C/C++/Fortran sobre plataformas Linux/Unix.

Los threads en Java o C# simulan procesamiento en paralelo en un solo procesador. ¿Qué pasa si realmente tenemos más de un CPU en la máquina? ¿dejará de simular y distribuirá el trabajo entre diferentes procesadores? Esto es lo deseable. La primera aplicación que probé hace algunos meses era en C# sobre plataforma Mono.net en que cada thread maneja un sistema independiente de matrices, es decir: no necesito sincronizar datos. Al correr en la estación de trabajo con cuatro cores la plataforma Mono.net reconoció todos y cada unos de ellos y escaló la aplicación en forma prácticamente ideal (insisto: no necesitaba sincronización, caso contrario el escalamiento ya no hubiese resultado tan perfecto), los procesadores eran Opteron dual core de 3 Ghz. Llevé la misma prueba a una máquina con dos cores Xeón de 3 Ghz y el escalamiento fue igual de bueno.

Un artículo de Javalobby, “Java: Multi-core Ready or not?” de Jim Falgout, que plantea que todo está listo en Java para multi-core, me animó a hacer unas cuantas pruebas con Java 1.6 y con Groovy 1.1 RC3 que resultaron exitosas y muy alentadoras. Pude también comprobar que Groovy es el doble de lento que Java y no 30 veces mas como se afirman en algunos foros.

Mas detalles con código en mis próximas entradas de blog.