共享内存与Go channel通信

共享内存与Go channel通信,go,ipc,shared-memory,channel,goroutine,Go,Ipc,Shared Memory,Channel,Goroutine,围棋的口号之一是 我想知道Go是否允许两个不同的GO编译的二进制文件在同一台机器上运行以相互通信(即客户端-服务器),和Boo::C++中的进程间的速度相比有多快?到目前为止,我看到的所有示例都只说明了相同程序例程之间的通信 一个简单的Go示例(带有单独的客户端和服务器代码)将非常感谢 读到这篇文章时,我首先想到的是无堆栈Python。Go中的频道让我想起了很多无堆栈Python,但这可能是因为(a)我使用过它,(b)它们实际上来自于我从未接触过的语言/思想 我从未尝试将通道用作IPC,但这可能

围棋的口号之一是

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


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

读到这篇文章时,我首先想到的是无堆栈Python。Go中的频道让我想起了很多无堆栈Python,但这可能是因为(a)我使用过它,(b)它们实际上来自于我从未接触过的语言/思想

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

方案1 方案2 如果您使用传统的IPC方法,您可以在每一侧都有通道,将它们的通信封装在其上。这导致了实现中的一些问题,我甚至无法思考如何解决这些问题,可能还有一些意想不到的比赛条件

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


不过,在每侧包装一个带有通道的简单套接字可以获得几乎所有的好处。

我已经研究过如何包装MPI库。我现在的想法是使用

func SendHandler(comm Comm){
    // Look for sends to a process
    for {
        i := <-comm.To;
        comm.Send(i,dest);  
    }
}
func ReceiveHandler(comm Comm){
    // Look for recieves from a process
    // Ping the handler to read out
    for {
        _ = <-comm.From;
        i := comm.Recv(source);
        comm.From <- i;
     }
}
func SendHandler(comm-comm){
//查找发送到进程的消息
为了{

i:=Rob说他们正在考虑如何使频道作为(网络)透明RPC工作,这目前还不起作用,但显然这是他们想花时间把它做对的事情

同时,您可以使用它,虽然它不是一个完美和无缝的解决方案,但已经很好地工作了

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

ahoy = chan.recv()
func SendHandler(comm Comm){
    // Look for sends to a process
    for {
        i := <-comm.To;
        comm.Send(i,dest);  
    }
}
func ReceiveHandler(comm Comm){
    // Look for recieves from a process
    // Ping the handler to read out
    for {
        _ = <-comm.From;
        i := comm.Recv(source);
        comm.From <- i;
     }
}