performance scala

performance - ¿Qué tan bien se desempeña Scala en comparación con Java?



(3)

Estoy de acuerdo con los comentarios de Rex en este post, y tengo experiencia personal para apoyarlo. Convertí un applet de Procesamiento de java a scala, sin cambiar ningún detalle de implementación, y ambos applets renderizaron un marco en ~ 6ms, con poca variación.

La pregunta en realidad lo dice todo.

La razón detrás de esta pregunta es que estoy a punto de comenzar un pequeño proyecto paralelo y quiero hacerlo en Scala . Estoy aprendiendo scala durante el último mes y ahora me siento cómodo trabajando con él. El compilador de Scala en sí es bastante lento (a menos que uses fsc ). Entonces, ¿qué tan bien se realiza en JVM? Anteriormente trabajé en groovy y, a veces, había visto más que java. Mi pregunta es qué tan bien se desempeñan los scala en JVM en comparación con Java. Sé que scala tiene algunas características muy buenas (FP, lang dinámico, tipificado estáticamente ...) pero al final del día necesitamos el rendimiento ...


La mayoría de mi trabajo utiliza Scala como lenguaje de alto rendimiento. Si uno realmente presta mucha atención al rendimiento, Scala es casi siempre tan bueno como Java (si no es equivalente). Si no le importan las creaciones de objetos, por ejemplo, puede ser mucho peor, como puede ocurrir en Java si utiliza una biblioteca que no tiene en cuenta las creaciones de objetos. (De hecho, mi código Scala es a menudo más rápido que mi código Java porque me resulta mucho más fácil hacer que mi código altamente optimizado sea cómodo de usar y reutilizar, pero Java sería tan rápido o más rápido si solo tuviera más tiempo y más tiempo). paciencia.)

Si desea algunos datos que demuestren que Scala puede ser básicamente tan rápido como Java, consulte los resultados en el juego de Benchmark de lenguajes informáticos . (Otra comparación menos útil pero aún interesante para la programación multinúcleo de alto rendimiento es el Wide Finder 2 de Tim Bray. Esto es menos útil porque el algoritmo no está definido de antemano, por lo que una gran parte de las diferencias se reducen a diferencias en el algoritmo).


Scala se compila a código de bytes y se escribe de forma estática, por lo que se pueden hacer muchas de las mismas optimizaciones que se pueden realizar para lenguajes de tipo estático como Java (en lugar de lenguajes de tipo dinámico como Groovy). Así que comparar Groovy con Scala es comparar manzanas con naranjas.

Ahora, la comparación de Java a Scala:

Puede esperar que Scala esté a la par con Java en la mayoría de las situaciones. Scala puede ser lento si lo programa en forma estúpida, por ejemplo, los tonos de mezclas a través de Rasgos podrían proporcionar una sobrecarga que Java simple no tendría.

Pero ...

Si los Rasgos realmente están resolviendo un problema complejo de buen gusto, entonces una solución en Java simple tendría que abordar esa misma complejidad. Quién puede decir que la solución que escriba en Java utilizando sus propios patrones será más eficiente que la que obtendrá gratis en Scala (recuerde, el compilador de Scala fue escrito por personas que probablemente son mejores programadores que usted).

Por otro lado, si está utilizando las características de idioma sin una buena razón (por ejemplo, los objetos Integer cuando funcionarán los primitivos int simples), su código estará inflado, lento, no importa qué idioma use.

Además, considere la clase especial de aplicaciones basadas en solicitud-respuesta que interactúan con una base de datos u otro recurso intensivo de E / S. El cuello de la botella no va a ser el ''nuevo'' operador o la sobrecarga de invocación del método virtual, es casi seguro que será la E / S.

En resumen, el rendimiento entre Scala y Java es aproximadamente el mismo, y no debería ser la razón principal por la que elija uno sobre el otro en el 99% de los casos. Dado que la mano de obra humana calificada es más costosa que el hardware de computadora, es mejor que elija el idioma que puede (o puede aprender) programar de manera más eficiente (incluidos sus compañeros de equipo). Si Scala le permite escribir una décima parte del código como Java, puede obtener 10 veces el beneficio al usarlo. Si Scala te ralentiza 10 veces (porque es muy difícil de leer), ¡quédate con Java!