我正在用Go编写负载平衡的服务器系统。
负载平衡服务器将与多个应用程序服务器通信并处理请求。这些服务器都可以在同一台计算机或网络上运行。
我已经找到了网络,但是现在我需要找到一种最佳的方式来使负载均衡器与本地应用程序服务器进行通信。使用localhost
-networking似乎并非最佳选择。
我正在尝试通过shmget
和shmat
系统调用共享内存,但是没有找到任何有效的示例,并且该syscall
软件包也完全没有文档说明。
有人可以为我提供如何使用这些呼叫的示例,还是可以在Go上进行IPC的可行替代方案?
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
如果命名管道足以满足要求,那么它们可能足以满足您的用例。另外,如果编写得不错,则可以开始使用命名管道(因为这很容易),如果发现命名管道的性能不够好,则可以切换到共享内存(无论使用哪种语言,共享内存都不容易)。
进程间通信 IPC全称Interprocess Communication,指进程间协作的各种方法,当然包括共享内存,信号量或Socket等。 管道(Pipe) 管道是进程间通信最简单的方式,任何进程的标准输出都可以作为其他进程的输入。 信号(Signal) 下面马上会介绍。 消息队列(Message) 和传统消息队列类似,但是在内核实现的。 共享内存(Shared Memory) 后面也会有更详
主要内容:面向读者,前提条件,问题反馈进程间通信(IPC)是指一种机制,操作系统允许各种进程之间相互通信。 这涉及到同步他们的行为和管理共享数据。 本教程介绍了IPC的基础知识。 每个章节都包含相关的主题和简单而有用的例子。 面向读者 本教程专为初学者设计,旨在了解进程间通信的基本概念以及不同组件的功能。 前提条件 学习本教程没有特定的先决条件,但是,熟悉操作系统及其各种概念将成为理解本教程的一个额外优势。 问题反馈 我们不能保证您在
问题内容: 我遇到需要将命令发送到正在运行的Java应用程序的情况,现在我正在使用tcp / ip套接字使用Internet Explorer上下文菜单项将命令发送到应用程序。但是,一旦应用程序启动,病毒扫描程序就会抱怨该应用程序开始监听,尽管我只是在监听本地连接。我认为这可能会使用户感到困惑。我正在寻找其他方式而又不会惹恼影音扫描器吗? 问题答案: 为此,最好不要使用基于文件的FIFO队列。或使
进程之间用来相互通讯和同步
4. 进程间通信 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)。如下图所示。 图 30.6. 进程间通信 4.1. 管道 管道是一种最基本
我们在Linux信号基础中已经说明,信号可以看作一种粗糙的进程间通信(IPC, interprocess communication)的方式,用以向进程封闭的内存空间传递信息。为了让进程间传递更多的信息量,我们需要其他的进程间通信方式。这些进程间通信方式可以分为两种: 管道(PIPE)机制。在Linux文本流中,我们提到可以使用管道将一个进程的输出和另一个进程的输入连接起来,从而利用文件操作API