me di cuenta el siguiente comentario en mi copia de Expertos de F # en la página 379:Procesador Buzón sobre Sistemas Distribuidos
fallecimiento y procesar mensajes
A menudo se distingue entre de memoria compartida concurrencia y mensaje pasando la concurrencia. El primero es a menudo más eficiente en máquinas locales y se trata en la sección "Uso de Concurrencia de memoria compartida" más adelante en en este capítulo. Este último se amplía a los sistemas donde no hay memoria compartida , por ejemplo, sistemas distribuidos , y también se puede usar para evitar los problemas de rendimiento asociados con la memoria compartida .
Me interesa el mensaje que pasa la concurrencia entre procesos sin memoria compartida. Todos los ejemplos en Experto F # y en Internet que muestran cómo utilizar el MailboxProcessor contiene alguna variación de este código:
let counter =
MailboxProcessor.Start(fun inbox ->
let rec loop n =
async {
do printfn "n = %d, waiting... " n
let! msg = inbox.Receive()
match msg with
| -1 ->
do printfn "'Til the bitter end..."
return()
| n -> return! loop(n + msg)
}
loop 0)
counter.Post(20)
counter.Post(50)
counter.Post(-1) // kill mailbox
En otras palabras, usted tiene que tener una manija en su MailboxProcessor en memoria compartida antes puedes publicar mensajes en su canal. Por lo que yo sé, esto no es concurrencia al estilo de Erlang, ya que solo se pueden publicar mensajes en MailboxProcessors en el mismo proceso (nota: procesar, no enhebrar).
¿Es posible que un MailboxProcessor en un proceso envíe mensajes a otro proceso de MailboxProcessor? Si es así, ¿podría proporcionar una muestra?