为了账号安全,请及时绑定邮箱和手机立即绑定

共享内存与Go通道通信

共享内存与Go通道通信

Go
胡说叔叔 2021-04-06 12:15:03
Go的口号之一是“不要通过共享内存进行通信;而是通过通信共享内存。我想知道Go是否允许在同一台机器上运行的两个不同的Go编译二进制文件相互通信(即客户端-服务器),以及与C ++中的boost :: interprocess相比,速度有多快?到目前为止,我所看到的所有示例仅说明了相同程序例程之间的通信。一个简单的Go示例(带有单独的客户端和服务器代码)将不胜感激!
查看完整描述

3 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

当我读到这篇文章时,我想到的第一件事就是Stackless Python。在围棋通道让我想起很多无堆栈的Python,但是这可能是因为(一)我用它和(b)中的语言/想法,他们实际上都来自我从来没有碰到。


我从未尝试将通道用作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方法,则可以在每一侧都有通道,将其通信包装在其顶部。这导致了一些实现上的问题,我什至无法考虑如何解决,并且可能会出现一些意外的竞争情况。


但是,我同意。通过具有Go通道相同灵活性的流程进行通信的能力非常出色(但我担心会不稳定)。


但是,将简单的插座包装在两侧各有一个通道即可获得几乎所有的好处。


查看完整回答
反对 回复 2021-04-26
  • 3 回答
  • 0 关注
  • 285 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号