Ich bemerkte den folgenden Kommentar in mein Exemplar von Expert F # auf Seite 379:Mailbox Processor auf verteilte Systeme
Passing und Nachrichten zu verarbeiten
Man unterscheidet oft zwischen Shared-Memory gemacht Nebenläufigkeit und Nachricht vorübergehende Nebenläufigkeit. Ersteres ist oft effizienter auf lokalen Maschinen und wird im Abschnitt "Verwenden von Shared-Memory Concurrency" später in dieses Kapitel behandelt. Letzteres skaliert zu Systemen, in denen es keine gemeinsame Speicher gibt, zum Beispiel verteilt Systeme, und kann auch verwendet werden, um Leistungsprobleme mit gemeinsamen Speicher verbundenen zu vermeiden.
Ich bin interessiert Nachricht Weitergabe von Nebenläufigkeit zwischen Prozessen ohne gemeinsamen Speicher. Alle Beispiele in Expert F # und im Internet, die zeigen, wie die MailboxProcessor verwenden eine gewisse Variation dieses Codes enthalten:
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
Mit anderen Worten, müssen Sie haben einen Griff auf Ihrem MailboxProcessor in Shared-Memory vor Sie können Nachrichten an seinen Kanal senden. Dies ist, soweit ich weiß, keine Parallelität im Erlang-Stil, da Sie Nachrichten nur im gleichen Prozess an MailboxProcessors senden können (Hinweis: Prozess, nicht Thread).
Ist es möglich, dass ein MailboxProcessor in einem Prozess Nachrichten an einen anderen MailboxProcessor-Prozess sendet? Wenn ja, könnten Sie eine Probe zur Verfügung stellen?