que estaba buscando modelo sobre proceso de Erlang a través de Internet y descubrió algunos gráficos slides 3-4 en una de la charla dada por Joe Armstrong. Muestran una gran diferencia entre entre la creación del proceso y el tiempo de paso del mensaje entre Erlang, java y C#. ¿Alguien puede decirme la razón detrás de tal grande diferencia?Por qué Erlang proceso de creación y el paso de mensajes de tiempo de menos de Java y C#
Respuesta
En Erlang, los procesos no son procesos reales. Son estructuras livianas manejadas por el lenguaje. La transmisión de mensajes también es manejada por el idioma, usando memoria compartida cuando sea posible.
Por otro lado, otros lenguajes están utilizando procesos/subprocesos reales ya que no tienen estructuras de luz incorporadas como esta. Por lo tanto, estas estructuras son un poco más pesadas, están usando primitivas de hilo para comunicarse (más lento).
No sé tu gráfico, pero supongo que muestra que los procesos de Erlang son mejores. Está hecho comparando cosas que son intrínsecamente diferentes, sin embargo, muestra que Erlang se mueve para modelar objetos independientes que se comunican usando mensajes (cosas que realmente no se pueden hacer en otros idiomas).
No diría que usa memoria compartida, ya que los datos se copian (casi) siempre entre montones de procesos. Aunque todavía todo sucede dentro de un proceso de sistema operativo. – gleber
Creo que Scharron quiso decir que aunque, conceptualmente, no se comparte nada, es posible que la VM comparta datos pasando punteros en lugar de copiar los datos, como una optimización. –
Los procesos de Erlang son muy livianos. Una implementación ni siquiera necesita asignar una secuencia de sistema operativo a un proceso de Erlang. Esto tiene que ver con la naturaleza funcional de Erlang.
No está realmente relacionado con que Erlang sea un lenguaje funcional en absoluto. Cualquier lenguaje con procesos baratos y el envío de mensajes lo haría. (No es que haya otros lenguajes con procesos similares a Erlang ...) –
En realidad, está muy relacionado con que Erlang es un lenguaje funcional porque la naturaleza funcional de las variables de asignación única elimina gran parte del proceso de aislamiento porque puede no hay que preocuparse por una actualización compartida o un conflicto de acceso. Agregue copia de mensajes en lugar de hacer referencia y obtendrá una receta para procesos realmente livianos. – Alan
@ Alan: Sí, eso es lo que tenía en mente, gracias por escribirlo para mí. :) –
- 1. Orden de tiempo de los mensajes
- 2. Bucles de mensajes de Erlang
- 3. Erlang - C y Erlang
- 4. Diferencia entre C++ y proceso de compilación de Java
- 5. ¿Cuál es la diferencia entre el paso de mensajes y la invocación de métodos?
- 6. CPU de tiempo utilizada por el proceso
- 7. fork(), pipe() y exec() proceso de creación y comunicación
- 8. Proceso de creación de código y funciones incrustadas
- 9. Creación dinámica de colas de mensajes asíncronos en Java
- 10. Terminología Java: ¿Por qué error en tiempo de compilación y no excepción en tiempo de compilación?
- 11. java Proceso de tiempo de espera nativa
- 12. Quantum de tiempo por proceso por subproceso
- 13. Por qué la dirección de la variable de proceso hijo y el proceso primario es igual
- 14. Paso a paso Creación/despliegue automatizado de ASP.NET
- 15. ¿Integración de estado de Erlang y C/C++?
- 16. lo que es diferente entre el paso por valor y el paso por referencia usando C#
- 17. C++ y protección de memoria de proceso
- 18. Java: sincronización de varios subprocesos según el paso del tiempo
- 19. Node.JS función y el paso de argumentos de la horquilla a hijo-proceso
- 20. ¿Cómo paso de Java a C#?
- 21. Convertir marca de tiempo a fecha y hora en erlang
- 22. C++ creación de objetos y constructor
- 23. Memoria total utilizada por el proceso de Java y el tamaño de pila
- 24. Cuándo y cómo usar el estilo de paso de continuación
- 25. creación de la lista en Erlang
- 26. tortoisehg paso de confirmación de un paso: cómo y dónde está el archivo de registro
- 27. gen_fsm de tiempo de espera si no recibe mensajes
- 28. ¿Qué es el tiempo de ejecución y el polimorfismo de tiempo de compilación?
- 29. Creación de un archivo de proceso por lotes, para la ejecución simple del comando javac y java
- 30. Creación de un sistema comercial: Pure Erlang o Erlang/OTP?
El gráfico y las diapositivas producen poca información para saber lo que realmente se midió aquí. Ni siquiera está claro qué se considera un "proceso". Por ejemplo, parece que un proceso de Erlang no es un proceso de nivel de sistema operativo donde está Java o C#. Parece que se comparan manzanas y naranjas ... –
@ 0xA3: los procesos de Erlang se comportan como procesos desde el punto de vista del desarrollador. Son unidad aislada de ejecución. Se comportan como procesos, no como hilos. Otros tienen la culpa de que usan procesos o subprocesos de nivel de sistema operativo y no proporcionan la misma herramienta útil para resolver problemas reales. Si quiere hacer lo mismo que en Erlang en esos idiomas, debe usar lo que pueda para que la comparación sea correcta. –
posible duplicado de [Técnicamente ¿por qué los procesos en Erlang son más eficientes que los hilos del sistema operativo?] (Http://stackoverflow.com/questions/2708033/technically-why-is-processes-in-erlang-more-efficient-than-os -hilos) – Christian