一尘不染

进行进程间通信

go

我正在用Go编写负载平衡的服务器系统。

负载平衡服务器将与多个应用程序服务器通信并处理请求。这些服务器都可以在同一台计算机或网络上运行。

我已经找到了网络,但是现在我需要找到一种最佳的方式来使负载均衡器与本地应用程序服务器进行通信。使用localhost-networking似乎并非最佳选择。

我正在尝试通过shmgetshmat系统调用共享内存,但是没有找到任何有效的示例,并且该syscall软件包也完全没有文档说明。

有人可以为我提供如何使用这些呼叫的示例,还是可以在Go上进行IPC的可行替代方案?


阅读 201

收藏
2020-07-02

共1个答案

一尘不染

Go具有内置的RPC系统(http://golang.org/pkg/rpc/),可简化Go进程之间的通信。

另一种选择是通过网络连接发送gob编码的数据(http://blog.golang.org/2011/03/gobs-of-
data.html)。

如果没有基准测试,则不应关闭本地网络。例如,Chrome使用IPC的命名管道,它们在进程之间传输大量数据(例如,渲染的位图):

我们主要的进程间通信原语是命名管道。在Linux和OS X上,我们使用socketpair()

- http://www.chromium.org/developers/design-documents/inter-process-
communication

如果命名管道足以满足要求,那么它们可能足以满足您的用例。另外,如果编写得不错,则可以开始使用命名管道(因为这很容易),如果发现命名管道的性能不够好,则可以切换到共享内存(无论使用哪种语言,共享内存都不容易)。

2020-07-02