Поблагодарить!

етил следующий комментарий в моей копии Expert F # на странице 379:

Передача и обработка сообщений

Часто проводится различие междупараллелизм совместно используемой памяти а такжепараллелизм передачи сообщений, Первый часто более эффективен на локальных машинах и рассматривается в разделе «Использование параллельной работы совместно используемой памяти» далее в этой главе. Последний масштабируется до систем, в которых отсутствует общая память, например, распределенных систем, и также может использоваться, чтобы избежать проблем с производительностью, связанных с общей памятью.

Меня интересует параллелизм передачи сообщений между процессами без разделяемой памяти. Все примеры в Expert F # и в Интернете, которые демонстрируют, как использовать MailboxProcessor, содержат некоторые варианты этого кода:

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

Другими словами, вы должны иметь дескриптор вашего MailboxProcessor в разделяемой памяти, прежде чем вы сможете отправлять сообщения на его канал. Насколько я знаю, это не параллелизм в стиле Erlang, поскольку вы можете отправлять сообщения в MailboxProcessors только в одном процессе (примечание: процесс, а не поток).

Возможно ли, чтобы один MailboxProcessor в одном процессе отправлял сообщения другому процессу MailboxProcessor? Если да, не могли бы вы предоставить образец?

Ответы на вопрос(2)

Ваш ответ на вопрос