共享内存与Go通道通信

art*_*tur 21 ipc channel shared-memory go goroutine

Go的口号之一是不要通过共享记忆来沟通; 相反,通过沟通分享记忆.

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

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

Jed*_*ith 7

当我读到这篇文章时,我想到的第一件事就是Stackless Python.Go中的频道让我想起了很多 Stackless Python,但这很可能是因为(a)我已经使用过它,(b)它们实际来自我从未接触过的语言/思想.

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

程序1

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

chan.send("Ahoy!")
Run Code Online (Sandbox Code Playgroud)

程序2

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

ahoy = chan.recv()
Run Code Online (Sandbox Code Playgroud)

如果您使用传统的IPC方法,您可以在每一侧都有通道,将通信封装在它上面.这导致了实施中的一些问题,我甚至无法思考如何解决,可能还有一些意想不到的竞争条件.

但是,我同意; 使用Go通道的相同灵活性通过流程进行通信的能力将是惊人的(但我担心不稳定).

然而,在每侧包装带有通道的简单插座几乎可以获得所有好处.