Поблагодарить!
етил следующий комментарий в моей копии 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? Если да, не могли бы вы предоставить образец?