entre nodos, mensaje están (deben ser) pasa a través de TCP/IP. Sin embargo, ¿por qué mecanismo se pasan entre los procesos que se ejecutan en el mismo nodo? ¿Se usa TCP/IP en este caso también? Zócalos de dominio Unix? ¿Cuál es la diferencia en el rendimiento entre el paso de mensajes "dentro del nodo" y "entre nodos"?¿Cómo pasa Erlang mensajes entre procesos en el mismo nodo?
Respuesta
por qué mecanismo se pasaron entre los procesos que se ejecutan en el mismo nodo?
Debido a que los procesos de Erlang en el mismo nodo están ejecutando dentro de un solo proceso nativo — las estructuras de los mensajes BEAM emulador — simplemente se copian en la cola de mensajes del receptor. La estructura del mensaje se copia, en lugar de simplemente hacer referencia, para todos los motivos de programación funcional sin efectos secundarios.
Consulte erts_send_message()
en erts/emulator/beam/erl_message.c
en las fuentes de Erlang para obtener más información. En R15B01, los bits más relevantes a su pregunta comienzan en la línea 980 o menos, con la llamada a erts_queue_message()
.
Si habéis elegido para ejecutar múltiples emuladores BEAM en una única máquina física, yo supongo mensajes se envían entre ellos del mismo modo que entre las diferentes máquinas físicas. Probablemente no haya una buena razón para hacerlo ahora que BEAM tiene un buen soporte SMP.
¿Cuál es la diferencia de rendimiento entre los mensajes "dentro del nodo" y "entre nodos"?
Un punto de referencia simple en su hardware real sería más útil para usted que la evidencia anecdótica de los demás.
Si desea generalidades, sin embargo, tenga en cuenta que los anchos de banda de memoria son around 20 GByte/sec en estos días, y que es poco probable que tenga un enlace de red de nodos de más de 10 Gbit/seg. Eso significa que, si bien puede haber muchas diferencias entre su aplicación real y cualquier referencia sencilla de llevar a cabo o se encuentra, probablemente, estas diferencias pueden no pantano un orden de magnitud de diferencia en la velocidad de transferencia.
Si "solo" tiene un enlace de red de extremo a extremo de 1 Gbit/seg entre nodos, las transferencias intranode probablemente serán más de dos órdenes de magnitud más rápidas que las transferencias de internodos.
"Todos los datos en los mensajes entre procesos Erlang se copia, con la excepción de los binarios REFC en el mismo nodo Erlang.":
http://erlang.org/doc/efficiency_guide/processes.html#id2265332
- 1. ¿Erlang siempre copia mensajes entre procesos en el mismo nodo?
- 2. Bucles de mensajes de Erlang
- 3. Erlang C nodo relacionado pregunta
- 4. Comprimir mensajes enviados entre los nodos de Erlang
- 5. ¿Cómo supervisan los procesos los procesos del supervisor? ¿Se puede hacer lo mismo en la JVM?
- 6. Erlang: nodo esclavo inicial
- 7. Recuento de reducción de procesos Erlang
- 8. Procesos livianos de estilo Erlang en .NET
- 9. Erlang: RPC a un nodo con salida en ese nodo
- 10. C++ diferencia entre ** y * & en el parámetro que pasa
- 11. comunicación entre procesos en python
- 12. Comunicación entre procesos en c/C++
- 13. Insertar nodo del mismo nivel en JS
- 14. ¿Cómo accedera erlang el recurso compartido?
- 15. ¿Pasar mensajes entre MailboxProcessors remotos?
- 16. ¿Cómo se equilibra la carga del sistema operativo entre múltiples procesos que aceptan el mismo socket?
- 17. Python/Erlang: ¿Cuál es la diferencia entre Twisted, Stackless, Greenlet, Eventlet, Coroutines? ¿Son similares a los procesos de Erlang?
- 18. ¿Cómo ejecuto procesos de forma sincrónica, buscando el mismo resultado?
- 19. Erlang de ping problema del nodo
- 20. Erlang: iniciando un nodo remoto programáticamente
- 21. Dos procesos de lectura/escritura en el mismo archivo Python
- 22. Erlang: pubsub simple para procesos: ¿está bien mi enfoque?
- 23. Buscando una alternativa a los mensajes de Windows utilizados en la comunicación entre procesos
- 24. Comunicación entre procesos en Lua
- 25. Comunicación entre procesos en .NET
- 26. ¿Cómo obtengo la dirección IP de un nodo Erlang?
- 27. rendimiento entre diferentes procesos
- 28. Erlang: ¿comportamientos múltiples definidos en el mismo módulo?
- 29. ¿Es posible tener tubería entre dos procesos secundarios creados por el mismo elemento primario (LINUX, POSIX)
- 30. Compartiendo una variable entre procesos
Si TCP/IP se utiliza como el transporte, el mensaje sería sin duda "copia", pero también se podría copiar utilizarse si se utiliza algún otro mecanismo, por lo que creo que esto resuelve la cuestión. – mjs
Todos los datos en mensajes entre procesos de Erlang en el mismo nodo de Erlang se copian en la memoria. Además, los binarios de refc se comparten entre los procesos de Erlang en el mismo nodo de Erlang. Por lo tanto, es mucho más rápido que TCP/IP. – hdima
Hmm ... ¿Se refiere a los procesos de Erlang y Erlang nodo en la pregunta original? – hdima