在我运行 Linux (Ubuntu armhf) 的嵌入式系统中,我必须在进程之间进行通信。 我正在用 TCP 套接字来做。它工作得很好,但由于我的请求频率很高,我的处理器使用率非常高(94% 的平均测量 whit nmon)。 有没有一种方法可以更有效地使用这种通信来降低它?
最佳答案
共享内存
和消息队列
可用于在进程之间交换信息。区别在于它们的使用方式。两者各有优缺点。
共享内存
它是一 block 可以被多个进程读写的存储区域。它不提供内在的同步;换句话说,由程序员来确保一个进程不会破坏另一个进程的数据。但它在吞吐量方面是高效的:读取和写入是相对较快的操作。
消息队列是一种单向管道:
一个进程写入队列,另一个进程按写入顺序读取数据,直到出现数据结束条件。创建队列时,会设置消息大小(每条消息的字节数,通常相当小)和队列长度(待处理消息的最大数量)。访问比共享内存慢,因为每个读/写操作通常是一条消息。但是队列保证每个操作要么成功处理整个消息,要么在不改变队列的情况下失败。因此,写入者永远不会在仅写入部分消息后失败,而读取器要么检索到完整消息,要么什么也得不到。
关于Linux,应用程序之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22011432/