【发布时间】:2011-01-17 21:09:08
【问题描述】:
我们仍处于项目的设计阶段,但我们正在考虑在嵌入式 Linux 内核上设置三个独立的进程。其中一个进程是通信模块,它通过各种媒介处理与设备之间的所有通信。
另外两个进程需要能够通过通信进程发送/接收消息。我正在尝试评估 Linux 提供的 IPC 技术;其他进程将发送的消息大小会有所不同,从调试日志到大约 5 Mbit 速率的流媒体。此外,媒体可以同时流入和流出。
您会为此应用推荐哪种 IPC 技术? http://en.wikipedia.org/wiki/Inter-process_communication
处理器运行在 400-500 Mhz 左右,如果这有任何改变的话。 不需要跨平台,只有Linux就可以。 需要用 C 或 C++ 实现。
【问题讨论】:
-
Linux内核提供以下IPC机制:信号、匿名管道、命名管道或FIFO、SysV消息队列、POSIX消息队列、SysV共享内存、POSIX共享内存、SysV信号量、POSIX信号量、FUTEX锁、使用 mmap 的文件支持和匿名共享内存、UNIX 域套接字、Netlink 套接字、网络套接字、Inotify 机制、FUSE 子系统、D-Bus 子系统。对于我的大部分需求,我使用套接字。
-
@motiveicgeek D-Bus 完全在用户空间中完成。一些内核人员正在开发kdbus,但它仍在进行中。
-
在 arm926ejs 200MHz 处理器上,使用两个 uint32 参数进行方法调用和回复会消耗 0 到 15 毫秒之间的任何时间。平均 6 毫秒。其他人如何看待其他处理器?
-
Comparing Unix/Linux IPC 的可能重复项 这一项可能过于宽泛,并且倾向于退化为那一项。
-
对于“经典”Linux IPC 机制的回顾:参见here