共享内存与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;
}
}