在进程调用之间传输数据

我有一个被称为无数次的Linux进程,我需要尽快完成这个过程。

问题是,我必须保持一个状态之间的调用(从以前的调用加载数据,并将其存储下一个),而不运行另一个进程/守护进程。

你能build议快速的方法吗? 我知道我可以使用文件的I / O,并希望避免它,出于明显的性能原因。 应该(可以吗?)我创build一个命名pipe道来读/写和避免真正的磁盘I / O?

管道不适合这个。 使用posix共享内存或posix消息队列如果你是绝对肯定的文件太慢 – 你应该先测试。

在共享内存的情况下,如果程序不存在,程序将使用shm_open()创建段,如果是则将其打开。 你mmap()的内存,并进行任何更改并退出。 只有当你知道你的程序不再被调用,并且不再需要共享内存时,你才使用shm_unlink()。

通过消息队列,只需设置队列。 您的程序读取队列,进行任何更改,写入队列并退出。 Mq_unlink()当你不再需要队列时。

两种方法都具有内核持久性,因此在重新引导时会丢失共享内存和队列。

这听起来像你有一个不断被某个东西执行的过程。

为什么不创建一个产生工作线程的工厂? 工厂可以为工人提供所需的任何信息。

…我可以使用文件的I / O,并希望避免它,出于明显的性能原因。

我想知道这是什么原因

Linux将文件缓存在页面缓存中的内核内存中。 write()系统调用是一个内核调用,它只将用户空间的数据复制到页面缓存中(当系统处于压力下时,情况有点复杂)。 过了一段时间, pdflush将数据异步写入磁盘。

文件read()首先检查页面缓存,以查看数据是否已经在内存中可用,以避免读取磁盘。 这意味着如果一个程序将数据写入文件而另一个程序读取它,则只要页面缓存保留这些文件,这两个程序就可以通过内核内存进行有效的通信。

如果你想完全避免磁盘写入,也就是说, 重启操作系统时不需要保持状态 ,这些文件可以放在/dev/shm/tmp ,这通常是内存中文件系统的挂载点。