Linux,应用程序之间的通信

标签 linux sockets tcp process communication

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

最佳答案

共享内存消息队列 可用于在进程之间交换信息。区别在于它们的使用方式。两者各有优缺点。

共享内存

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

消息队列是一种单向管道:

一个进程写入队列,另一个进程按写入顺序读取数据,直到出现数据结束条件。创建队列时,会设置消息大小(每条消息的字节数,通常相当小)和队列长度(待处理消息的最大数量)。访问比共享内存慢,因为每个读/写操作通常是一条消息。但是队列保证每个操作要么成功处理整个消息,要么在不改变队列的情况下失败。因此,写入者永远不会在仅写入部分消息后失败,而读取器要么检索到完整消息,要么什么也得不到。

关于Linux,应用程序之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22011432/

相关文章:

flash - Actionscript TCP 套接字无法为某些人发送消息

linux - 我将如何解析手册页以快速找到有关程序选项 ("-I"的信息)?

html - 如何用c语言通过tcp发送http协议(protocol)的html文件?

linux - 基于 Linux 的系统的 OSI TP4 实现

java - Java中如何通过Socket接收纯文本

java - android自定义信任和 key 管理器

c# - 通过 TCP 接收不完整/错误的字符串

linux - Google Cloud + Linux TCP 连接被拒绝,原因是什么?

linux - 启用 uart2,但从中读取不正确

java - 如何暂时禁用 JVM 网络连接