2010-08-24 11 views
6

que estaba buscando modelo sobre proceso de Erlang a través de Internet y descubrió algunos gráficos alt textslides 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#

+0

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 ... –

+3

@ 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. –

+0

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

Respuesta

7

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).

+5

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

+1

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. –

3

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.

+1

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 ...) –

+1

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

+0

@ Alan: Sí, eso es lo que tenía en mente, gracias por escribirlo para mí. :) –

Cuestiones relacionadas