没有套接字的进程间文件系统通信

Posted

技术标签:

【中文标题】没有套接字的进程间文件系统通信【英文标题】:Interprocess file system communication without sockets 【发布时间】:2016-05-13 08:45:39 【问题描述】:

我正在运行一个名为 MiniNet Wifi 的网络模拟器,它允许模拟包括 AP 和 UE(因此是 wifi)在内的网络拓扑。仿真软件是唯一可以访问一些关键变量的进程,例如UE(即移动设备)的“范围内 AP”。

UE 和 AP 在单独的 linux 网络命名空间 (netns) 中运行。仿真在主机(常规)命名空间中运行。这意味着主机和设备网络堆栈之间不可能进行通信。出于不相关的原因,这也是我需要的样子。

长话短说,我需要在仿真进程中生成一个线程,以允许其他进程传递消息(往返)。因此我需要使用文件系统而不是网络堆栈。所以我的问题归结为在 python 中执行此操作的“最佳”方式是什么。命名管道,只是一个简单的文件等?

还可以提到的是,如果消息传递相当快(ish),它是理想的,因为任务在某种程度上是时间紧迫的。

谢谢。

附言。一切显然都在同一台物理机器上运行并共享文件系统,即不要与 docker 混淆。

【问题讨论】:

我意识到这更像是一个操作系统问题,但在 python 中肯定必须有一种“首选”的方式。 命名(UNIX)套接字会很好 - 管道可能不太有用。一个简单的文件 + mmap 可能更快(匿名 mmap/shmem 段可能更快),但您必须自己弄清楚同步协议。 【参考方案1】:

感谢@Useless 为我指明了正确的方向。我找到了this link,它完美地解决了我的问题!

【讨论】:

以上是关于没有套接字的进程间文件系统通信的主要内容,如果未能解决你的问题,请参考以下文章

进程间通信(IPC)——Unix域套接字 VS 网络套接字

在不使用文件系统的情况下,Unix 上的 0 拷贝进程间通信

操作系统之 进程间通信的方式都有哪些

Linux系统编程之进程间通信

进程通信,线程通信,同步方式

进程间通信—管道