art*_*tur 21 ipc channel shared-memory go goroutine
Go的口号之一是不要通过共享记忆来沟通; 相反,通过沟通分享记忆.
我想知道Go是否允许在同一台机器上运行的两个不同的Go-compiled二进制文件相互通信(即客户端 - 服务器),以及与C++中的boost :: interprocess相比有多快?到目前为止,我看到的所有例子都只说明了相同程序例程之间的通信.
一个简单的Go示例(具有单独的客户端和服务器代码)将非常感谢!
当我读到这篇文章时,我想到的第一件事就是Stackless Python.Go中的频道让我想起了很多 Stackless Python,但这很可能是因为(a)我已经使用过它,(b)它们实际来自我从未接触过的语言/思想.
我从未试图将频道用作IPC,但这可能是因为替代方案可能更安全.这是一些伪代码:
chan = channel()
ipc = IPCManager(chan, None)
send_to_other_app(ipc.underlying_method)
chan.send("Ahoy!")
Run Code Online (Sandbox Code Playgroud)
chan = channel()
recv_from_other_app(underlying_method)
ipc = IPCManager(chan, underlying_method)
ahoy = chan.recv()
Run Code Online (Sandbox Code Playgroud)
如果您使用传统的IPC方法,您可以在每一侧都有通道,将通信封装在它上面.这导致了实施中的一些问题,我甚至无法思考如何解决,可能还有一些意想不到的竞争条件.
但是,我同意; 使用Go通道的相同灵活性通过流程进行通信的能力将是惊人的(但我担心不稳定).
然而,在每侧包装带有通道的简单插座几乎可以获得所有好处.