Linux,应用程序之间的通信

时间:2014-02-25 10:31:05

标签: linux sockets tcp process communication

在我运行Linux的嵌入式系统(Ubuntu armhf)中,我必须在进程之间进行通信。 我正在使用TCP套接字。它工作得很好,但由于我的请求频率很高,我的处理器使用率非常高(平均测量值为94%)。 有一种方法可以更有效地使用这种通信来降低它吗?

2 个答案:

答案 0 :(得分:3)

shared memorymessage queues可用于在进程之间交换信息。不同之处在于它们的使用方式。两者都有一些优势和劣势。

共享内存

这是一个可以通过多个进程读取和写入的存储区域。它没有提供固有的同步;换句话说,由程序员来确保一个进程不会破坏另一个进程的数据。但它在吞吐量方面效率很高:读写操作相对较快。

消息队列是单向管道:

一个进程写入队列,另一个进程按照写入的顺序读取数据,直到发生数据结束。创建队列时,将设置消息大小(每个消息的字节数,通常相当小)和队列长度(最大未决消息数)。访问速度比共享内存慢,因为每次读/写操作通常都是单个消息。但是队列保证每个操作都将成功处理整个消息,或者在不更改队列的情况下失败。所以作者在写完部分信息之后永远不会失败,读者将要么找回一条完整的信息,要么根本不回复。

答案 1 :(得分:3)

如果您希望坚持使用基本架构,可以从TCP套接字切换到Unix域套接字(AF_UNIX / AF_LOCAL)。由于它是严格的本地协议,因此它没有TCP的开销。