Pregunta ¿Es Erlang realmente rápido dado que incurre en muchas copias de memoria debajo del capó?


Soy un novato en Erlang, entiendo que el lenguaje adopta un diseño de modelo de actor y crea el concepto de proceso liviano, que es un punto clave para una programación simultánea alta. Pero, también adopta el paradigma de programación funcional, que impone transparencia de referencia. Eso significa que una variable no se puede cambiar después de la asignación. Por lo tanto, veo muchas funciones similares como:

gb_trees:delete(Key, Tree1) -> Tree2

Cuando eliminamos una clave de un árbol, creamos un árbol completamente nuevo. ¿Significa esto que clonamos todos los nodos de Tree1 aquí debajo del capó?

Si es así, ¿es este lenguaje realmente adecuado para el desarrollo de servidores de alto rendimiento?

Gracias !


5
2018-03-26 06:00


origen


Respuestas:


En el caso del árbol, solo necesita copiar los nodos que realmente cambian. Digamos que tienes un árbol:

       A
      / \
     /   \
    B     C
         / \
        D   E

Si llamas a tu delete_tree método con B como argumento, el único nodo que debe copiarse es A, ya que el subárbol CDE sigue siendo el mismo que antes de la operación.

Además, si no usa Tree1 después de la operación y solo utiliza el árbol resultante, el compilador puede cambiar la operación para modificar el árbol directamente, lo que puede ser más rápido.

Estas operaciones no son muy costosas, y para la mayoría de las estructuras de datos, la sobrecarga de copia redundante es muy pequeña. Para algunas cosas (es decir, imágenes grandes cargadas como matrices de bytes) es posible que necesite soluciones creativas.

Erlang es adecuado para sistemas de servidor, no por su velocidad, sino por su fiabilidad. No es gran cosa para un sistema grande agregar otra docena o cientos de servidores, pero es un gran negocio si tiene un tiempo de inactividad de 1 segundo para la facturación del teléfono, por ejemplo. En los Estados Unidos, podrían ser cientos de miles de llamadas telefónicas que no se facturan, lo que obviamente es un costo mayor que la compra de más servidores.


10
2018-03-26 07:36