Processador de caixa de correio em sistemas distribuídos

Percebi o seguinte comentário em minha cópia do Expert F # na página 379:

Passando e processando mensagens

É frequentemente feita uma distinção entresimultaneidade de memória compartilhada esimultaneidade de passagem de mensagem. O primeiro geralmente é mais eficiente em máquinas locais e é abordado na seção "Usando a simultaneidade de memória compartilhada" mais adiante neste capítulo. O último é escalado para sistemas em que não há memória compartilhada, por exemplo, sistemas distribuídos e também pode ser usado para evitar problemas de desempenho associados à memória compartilhada.

Estou interessado em passar mensagens simultâneas entre processos sem memória compartilhada. Todos os exemplos no Expert F # e na Internet que demonstram como usar o MailboxProcessor contêm algumas variações desse 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

Em outras palavras, você precisa controlar o seu MailboxProcessor na memória compartilhada antes de poder postar mensagens em seu canal. Isso não é simultaneidade no estilo Erlang, até onde eu sei, pois você só pode postar mensagens no MailboxProcessors no mesmo processo (nota: processo, não thread).

É possível que um MailboxProcessor em um processo envie mensagens para outro processo MailboxProcessor? Se sim, você poderia fornecer uma amostra?

questionAnswers(3)

yourAnswerToTheQuestion