1

(这适用于低延迟系统)

假设我有一些代码将接收到的 UDP 数据包传输到共享内存区域,那么我如何通知应用程序(在用户模式下)现在是时候读取共享内存了?我不希望应用程序不断轮询占用 CPU 周期。

是否可以在网络堆栈中插入一些代码,以便在写入共享内存后立即调用我的应用程序代码?

编辑我添加了一个 C 标记,但应用程序将使用 C++

4

2 回答 2

0

将事件从一个 Unix 进程发送到另一个进程的一种方法是使用 POSIX 信号量。您将使用sem_open来初始化和打开一个可以跨进程使用的命名信号量。

请参阅如何在 C 中多次调用 sem_open?.

在同一主机上的进程之间发出事件信号的最低延迟方法是旋转等待寻找(共享)内存位置以进行更改......这避免了系统调用。您明确表示您不希望应用程序轮询,但是在多核系统上运行的多线程应用程序中,如果您真的关心延迟,这可能不是一个糟糕的权衡。

于 2013-03-15T21:46:59.137 回答
0

除非您打算使用实时操作系统,否则没有“即时”协议。CPU 资源以几毫秒为单位可用,通常您的用户线程需要一些时间才能理解它可以继续。

考虑到以上所有,任何形式的 IPC 都可以:本地套接字、信号、管道、事件描述符等。性能上的实际差异将是悲惨的。

此外,共享内存的使用可能会导致维护/调试中不必要的复杂性,但这是设计人员的选择。

于 2013-03-15T22:57:33.923 回答