gpt4 book ai didi

go - 共享内存与 Go channel 通信

转载 作者:IT老高 更新时间:2023-10-28 13:02:46 24 4
gpt4 key购买 nike

Go 的口号之一是 Do not communicate by sharing memory; instead, share memory by communicating .

我想知道 Go 是否允许在同一台机器上运行的两个不同的 Go 编译二进制文件相互通信(即客户端-服务器),与 C++ 中的 boost::interprocess 相比,这将有多快?到目前为止,我看到的所有示例都只是说明了同一程序例程之间的通信。

非常感谢一个简单的 Go 示例(具有单独的客户端和服务器代码)!

最佳答案

当我读到这篇文章时,我首先想到的是 Stackless Python。 Go 中的 channel 让我很多想起了 Stackless Python,但这可能是因为 (a) 我已经使用过它,以及 (b) 他们实际上采用的语言/思想我从未接触过。

我从未尝试将 channel 用作 IPC,但这可能是因为替代方案可能更安全。这是一些伪代码:

程序1

chan = channel()
ipc = IPCManager(chan, None)
send_to_other_app(ipc.underlying_method)

chan.send("Ahoy!")

程序2

chan = channel()
recv_from_other_app(underlying_method)
ipc = IPCManager(chan, underlying_method)

ahoy = chan.recv()

如果您使用传统的 IPC 方法,则可以在每一侧都有 channel ,将它们的通信封装在它之上。这会导致实现中的一些问题,我什至无法考虑如何解决这些问题,并且可能会出现一些意想不到的竞争条件。

但是,我同意;使用与 Go channel 相同的灵 active 通过进程进行通信的能力将是惊人的(但我担心不稳定)。

不过,在每一侧都使用 channel 封装一个简单的套接字可以为您带来几乎所有的好处。

关于go - 共享内存与 Go channel 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1730655/

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