2010-05-31 20 views
6

¿Cómo funcionan los bucles de mensajes en Erlang? ¿Se sincronizan cuando se trata de procesar mensajes?Bucles de mensajes de Erlang

Por lo que yo entiendo, el ciclo comenzará por "recibir" un mensaje y luego realizar algo y presionar otra iteración del ciclo.

¿Entonces eso tiene que ser sincronizado? ¿derecho?

Si varios clientes envían mensajes al mismo bucle de mensajes, todos esos mensajes se ponen en cola y se realizan uno tras otro, o?

Para procesar múltiples mensajes en paralelo, debe generar múltiples bucles de mensajes en diferentes procesos, ¿verdad?

¿O no entendí todo?

Respuesta

9

El envío de un mensaje es asíncrono. El procesamiento de un mensaje es sincrónico, un mensaje se recibe a la vez porque cada proceso tiene su propio buzón (y solo uno).

4

Del manual (Erlang concurrency

cada proceso tiene su propia cola de entrada para los mensajes que recibe. Los nuevos mensajes recibidos se ponen al final de la cola. Cuando un proceso ejecuta una recepción, el primer mensaje de la cola se compara con el primer patrón en la recepción, si coincide, el mensaje se elimina de la cola y se ejecutan las acciones correspondientes al patrón.
Sin embargo, si el primer patrón no coincide, el segundo patrón es probado, si coincide, el mensaje se elimina de la cola y se ejecutan las acciones correspondientes al segundo patrón. Si el segundo patrón no coincide con el se prueba el tercero y así sucesivamente hasta que no haya más patrones para probar. Si no hay más patrones para probar, el primer mensaje se mantiene en la cola e intentamos con el segundo mensaje. Si esto coincide con cualquier patrón, se ejecutan las acciones apropiadas y el segundo mensaje se elimina de la cola (manteniendo el primer mensaje y cualquier otro mensaje en la cola). Si el segundo mensaje no coincide, intentamos con el tercer mensaje y así sucesivamente hasta que lleguemos al final de la cola. Si llegamos al final de la cola, el proceso bloquea (detiene la ejecución) y espera hasta que se reciba un nuevo mensaje y este procedimiento se repita.
Por supuesto, la implementación de Erlang es "inteligente" y minimiza el número de veces que se prueba cada mensaje con los patrones en cada recepción.

Para que pueda crear prios con la expresión regular, pero la concurrencia se realiza a través de múltiples procesos.