tag opciones manager google etiqueta activación activacion erlang

erlang - manager - opciones de activacion de la etiqueta



¿Hay alguna manera inteligente de dar a los mensajes diferentes prioridades? (1)

Creo que este documento responde a su pregunta:

https://www.erlang-solutions.com/upload/docs/9/erlang11-nystrom.pdf

Básicamente, desea recibir un recibo de la siguiente manera:

receive {hi_priority, Msg} -> Msg after 0 -> receive Msg -> Msg end end

Como la documentación de Erlang dice "después de 0" significa que el tiempo de espera se producirá inmediatamente si no hay mensajes coincidentes (prioridad) en el buzón.

No conozco ninguna forma más inteligente de hacerlo :)

He estado pensando, me gustaría poder asignar diferentes mensajes a diferentes prioridades cuando hablo con un proceso de erlang.

Me gustaría poder manejar primero los mensajes de alta prioridad y luego la prioridad baja una vez.

He intentado diferentes enfoques, acercamiento 1:

loop() -> receive {high, Msg} -> Do something with the message, loop() after 0 -> ok end, receive {low, Msg} -> Do something with the message, loop() after 0 -> loop() end.

Esto hace el trabajo, pero es lento y silencioso. Supongo que la recepción tiene que revisar todos los mensajes para ver si hay un mensaje "alto" cada vez que se ejecuta.

Enfoque 2:

También intenté hacer un enfoque de tipo mediador en el que primero se configuraba un mensaje como "recepción", luego se enviaba el mensaje a cola alta o cola baja, y finalmente a un "trabajador". enhebrar trabajos solicitados desde firsk la cola alta, y si esa cola no tiene nada, entonces desde la cola baja, como se ilustra aquí:

Esto tuvo el inconveniente de tener que esperar a que la solicitud llegara al frente de las diferentes colas, tal vez funcionaría algún tipo de sistema de prioridad :-)

¿Hay alguna forma más inteligente de hacer algo como esto?