En este prueba, podemos ver que el rendimiento de golang a veces es mucho más lenta que la de la scala. En mi opinión, ya que el código de golang se compila directamente a la c/c++ compatible con código binario, mientras que el código de la scala está compilado para la JVM de código de bytes, golang debe tener un rendimiento mucho mejor, especialmente en estos intensiva de cálculo del algoritmo de la referencia que hizo. Es mi entendimiento incorrecto?

http://benchmarksgame.alioth.debian.org/u64/chartvs.php?r=eNoljskRAEEIAlPCA48ozD%2Bb1dkX1UIhzELXeGcih5BqXeksDvbs8Vgi9HFr23iGiD82SgxJqRWkKNctgkMVUfwlHXnZWDkut%2BMK1nGawoYeDLlYQ8eLG1tvF91Dd8NVGm4sBfGaYo0Pok0rWQ%3D%3D&m=eNozMFFwSU1WMDIwNFYoNTNRyAMAIvoEba%3D%3D&w=eNpLz%2FcvTk7MSQQADkoDKg%3D%3D

  • La tabla muestra nada sobre el rendimiento y sobre todo el uso de la memoria. Usted está haciendo la pregunta equivocada.
  • no, muestra la memoria utilizada.
  • Lo peor es que alguien editado el post para quitar la URL del enlace a la prueba de que el gráfico se obtuvo. Es cierto que más contexto debería haber sido escrito alrededor de él, pero ahora no hay ninguna posibilidad de que cualquiera de ese contexto accesible.
  • han de leer los detalles del enlace? Muestra el tiempo empleado para cada algoritmo. Por ejemplo, para los binarios de los árboles, vaya toma 6x tiempo de scala.
  • buscando en que link puedo ver Ir superando Scala mayor parte del tiempo. Yo no soy un Ir fanboy, yo escribo la mayoría de la Scala de código, sino «puntos de referencia» como estos no son muy útiles en el juzgamiento de un idioma. Usted tiene que preguntarse si el código era realmente optimizado, si es que se ejecute el tiempo suficiente para capturar real GC actividad, etc.
  • La URL está lejos de pasado: benchmarksgame.alioth.debian.org/u64/…
  • En general: La JVM no es lento – no ha sido por un largo tiempo. Vaya también se encarga de la recolección de Basura, comprobaciones de límites, etc. También que no, obviamente, hacer muy extenso tiempo de compilación optimizaciones en favor de extremadamente rápido los tiempos de compilación. A especular acerca de las razones por las que uno u otro punto de referencia es rápido o lento no tiene ningún sentido en el que de manera general: Si usted quiere saber, sólo tienes que tomar un analizador y averiguar.
  • También tener en cuenta que la mayoría del código en su aplicación no es crítico para el rendimiento — Knuth dijo la famosa frase que normalmente 3% de los asuntos. Así que si un bien escrito Scala programa no funciona lo suficientemente bien, el perfil y hacer el 3% más rápido, mientras que el uso de bucles y de la cola de la recursividad en lugar de para la comprensión, las Matrices en lugar de otros tipos de colección, etc. Usted puede conseguir tan cerca de Java rendimiento como usted desea. Así que si usted desea comparar el rendimiento, comparar Ir con Java, no Scala. No de código que forma el 97% del tiempo, pero si importara, donde lo que importaba.

InformationsquelleAutor Tyr | 2014-01-02

5 Comentarios

  1. 56

    Aquí es lo que creo que está pasando en los cuatro puntos de referencia donde el ir de soluciones son los más lentos en comparación con la de la scala de soluciones.

    1. mandelbrot: la scala implementación tiene su bucle interno se desenrolla de una sola vez. Puede ser también que la JVM puede vectorise el cálculo como este, que creo que la vaya compilador no hacer todavía. Este es un buen manual de optimización más mejor JVM soporte para la aceleración de la aritmética.
    2. regex-adn: la scala de implantación no está haciendo lo que el punto de referencia se requiere: se le solicita «»»(un patrón en un momento) partido-reemplazar el patrón en la redirección de archivo y registro de la longitud de la secuencia»»» pero es sólo el cálculo de la longitud y la serigrafía. La versión de go hace el partido de reemplazar, así que es más lento.
    3. k nucleótidos: la scala aplicación ha sido optimizada mediante el uso de bits con los que pack de nucleótidos en un tiempo en lugar de utilizar caracteres. Es una buena optimización que también podría aplicarse a la marcha de código.
    4. binarias de los árboles: esta prueba de rendimiento de gc mediante la cumplimentación de la memoria RAM. Es cierto que java gc es mucho más rápido que el go gc, pero el argumento para no ser prioridad para ir es que generalmente uno puede evitar la gc en programas reales al no producir basura en el primer lugar.
    • La Scala regex-adn #5 programa ha sido eliminado.
  2. 18

    Esta tabla es de la Programación de Penaltis. Usted debe leer las renuncias en la tanda de Penaltis de la página antes de tomar los puntos de referencia como el evangelio. En el mejor de estos parámetros sólo son útiles para indicar amplias expectativas de rendimiento.

    Que dijo, la JVM tiene una década de los fondos de optimización y aparte de tiempo de inicio, proporciona un excelente rendimiento para la ejecución de código. Go es todavía un joven idioma. El hecho de que Vaya viene a poca distancia de una JVM lenguaje es impresionante. Si te gusta la programación en Ir, no debe rechazarla más de un punto de referencia.

    • No estoy rechazando ir. Yo sólo siento curiosidad sobre el resultado del benchmark.Estos casos deben ser puras de computación intensiva algoritmo que JVM no puede ayudar mucho. Como se compila directamente a los archivos binarios se debe tener un rendimiento similar como C. Incluso cómo de rápido JIT en la JVM es, no debe estar en la misma magnitud con código nativo. Yo también no comprar en ese ir todavía es joven – se ha desarrollado durante varios años. De todos modos, parece que no hay mejor explicación para esto.
    • No todos los lenguajes compilados correr a la misma velocidad. Vaya, posiblemente, no será tan rápido como C (pero la brecha se reduzca en el futuro). El recolector de basura, la comprobación de límites, etc. son útiles las características de la lengua que se desaceleración en el momento de la ejecución.
    • >>Usted debe leer las renuncias en la tanda de Penaltis de la página antes de tomar los puntos de referencia como el evangelio.<< — Usted debe tomar los puntos de referencia del juego de mediciones como el evangelio! Ellos muestran exactamente lo que dicen que mostrar. Usted debe tomar la página de inicio de exhortaciones como evangelio – «la Medición no es profetizar.»
  3. 14

    Esto se discute en el ir Preguntas frecuentes:

    Uno de los objetivos de diseño es acercar el rendimiento de C por programas similares, sin embargo, en algunos puntos de referencia que lo hace bastante mal, incluyendo varios en prueba/banco/tanda de penaltis. El más lento dependen de las bibliotecas para que las versiones de un rendimiento comparable no están disponibles en Ir. Por ejemplo, pidigits.ir depende de un multi-precisión paquete de matemáticas, y la versión C, a diferencia de Go, el uso de bpm (que está escrito en ensamblador optimizado). Parámetros que dependen de expresiones regulares (regex-adn.ir, por ejemplo) son, esencialmente, la comparación de Go native regexp paquete de maduro, altamente optimizado expresión regular las bibliotecas como PCRE.

    De referencia de los juegos se ganan por amplia sintonía y el Ir versiones de la mayoría de los puntos de referencia que necesitan atención. Si la medida comparables C y Go de los programas (inversa del complemento.go es un ejemplo), se verá que las dos lenguas son mucho más cerca en rendimiento bruto de este conjunto se indican.

    Aún así, hay espacio para la mejora. Los compiladores son buenos, pero podría ser mejor, muchas bibliotecas tienen mayor rendimiento de trabajo, y el recolector de basura no es lo suficientemente rápida todavía. (Incluso si lo fuera, teniendo cuidado de no generar basura innecesaria puede tener un efecto enorme.)

    Un lado, considerar el 10x (!) diferencia de velocidad entre los diferentes versiones de un punto de referencia para un determinado lenguaje de programación. C gcc #7 es de 8,3 veces más lento que C gcc #5, y Ada #3 casi 10 veces más lento que el de la Ada #5. Estos parámetros proporcionan una idea aproximada de cómo el lenguaje comparar, pero la diferencia entre Ir y Scala está dentro de un orden de magnitud, lo que significa que cualquier «intrínseca» de la variación entre los tiempos de ejecución es probable que sea eclipsada por las diferencias en la implementación: este post describe la forma en que se aceleró un programa 11x realizando de forma más inteligente de asignación de memoria. Tal vez el compilador/tiempo de ejecución debe ser el manejo de este tipo de optimizaciones de forma automática (como la JVM no, a un cierto nivel), pero no estoy seguro de que usted realmente puede llegar a la conclusión de que » Vaya más lento (resp. más rápido) que Scala’, en el caso general de estas cifras. Sólo mi opinión, sin embargo 🙂

    • >>cualquier «intrínseca» de la variación entre los tiempos de ejecución es probable que sea eclipsada por las diferencias en la implementación<< — No «probable», sólo que «podría ser».
  4. 11

    Ya que usted parece estar interesado en el estudio de estos sesgada puntos de referencia. Vamos a tomar un ejemplo real para el real escenario no algunas implementaciones de Fibonacci.

    Echa un vistazo a estas ranking para la web de marcos de referencia, la prueba fue hecha mediante native client, si está disponible y, a veces, el uso de OSS web de marcos, que también utiliza muchos paquetes para las pruebas con el mismo idioma. Las pruebas varían de las solicitudes de primas cadenas para el uso de ORM para consultar una base de datos.

    Es claro que la Scala rendimiento no es donde cerca de Ir, en todas las pruebas Scala fue inferior a Ir. Habiendo dicho esto, los puntos de referencia son nada cercano a la realidad y le sugiero que busque en un idioma de herramientas/características de la perspectiva o simplemente de lo que sería mejor para solucionar su problema.

    • No «Fibonacci implementaciones». No «sesgada».
    • En el mejor hardware (Dual Xeon E5 v2), vaya es más lenta que la de la scala en 5 de las 6 pruebas. JSON serializaion: ir 31.7%, scala llanura de 18.7%. Solo consulta: ir 34.9%, la scala de 54.2%. Varias consultas: ir a 37,4%, scala llanura 78.2%. Fortunas: ir 8.8%, scala llanura 52.1%. Las actualizaciones de los datos: ir al 72,4%, scala llanura 91.6%. Texto: ir 7.1%, scala llanura de 32.7%. techempower.com/benchmarks/previews/round9/…
    • no estás seguro de dónde está usted viendo esto, cuando compruebo los resultados de rendimiento de Ir se forma por delante de la Scala: ir 441,978 20.1% jugar-scala-anorm 181,316 8.2% techempower.com/benchmarks/…
  5. 4

    Como Brad señaló, estos resultados son de un parámetro en particular suite. Esto proporciona algunos información, pero no asuma que es la imagen completa. Sería útil saber si el código fuente es lo suficientemente bien escrito en cada caso para darle la mayor velocidad, menos uso de memoria, o algún otro objetivo.

    Tal vez podríamos comparar con otro sitio web que clasifica los idiomas. Echa un vistazo a http://www.techempower.com/benchmarks/ en el web de los códigos de servicio de la comparación. A pesar de ser un joven idioma, Vaya es uno de los mejores en algunos de estos puntos de referencia.

    Como en todos los puntos de referencia, siempre depende de lo que se esfuerzan y cómo medirlo.

Dejar respuesta

Please enter your comment!
Please enter your name here