gpt4 book ai didi

concurrency - 分布式系统上的邮箱处理器

转载 作者:行者123 更新时间:2023-12-03 14:10:49 26 4
gpt4 key购买 nike

我在第 379 页的 Expert F# 副本中注意到以下评论:

Passing and Processing Messages

A distinction is often made between shared-memory concurrency and message passing concurrency. The former is often more efficient on local machines and is covered in the section "Using Shared-Memory Concurrency" later in this chapter. The latter scales to systems where there is no shared memory, for example, distributed systems, and can also be used to avoid performance problems associated with shared memory.



我对没有共享内存的进程之间的消息传递并发感兴趣。 Expert F# 中的所有示例以及 Internet 上演示如何使用 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,然后才能将消息发布到其 channel 。据我所知,这不是 Erlang 风格的并发,因为您只能在同一进程中将消息发布到 MailboxProcessors(注意:进程,而不是线程)。

一个进程中的一个 MailboxProcessor 是否可以将消息发送到另一个 MailboxProcessor 进程?如果是这样,你能提供一个样本吗?

最佳答案

我认为您对术语有些困惑。 Erlang 进程不一定直接对应于 OS 进程。一个给定的 OS 进程可以有多个 Erlang 进程(通常是这样),就像你的进程有多个线程一样。如果您想在多个操作系统进程之间进行通信,您可能需要查看 System.Runtime.Remoting.Channels.Ipc .可以想象,可以围绕这些 API 创建 MailboxProcessor 样式的包装器。

关于concurrency - 分布式系统上的邮箱处理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/501656/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com