2015-12-22 58 views
2

在linux上,编写了一个简单的程序来创建一个POSIX消息队列,并向它发送一个消息,在进程终止后,似乎消息仍然存在。POSIX消息队列 - 重新启动后它仍然存在吗?

的问题是:

  • 重启后是否味精还在吗?
  • 如果它存在,那么它在磁盘上,如果它将msg存储在磁盘而不是内存上,它是如何保证性能的。

回答

4

在Linux上,消息队列安装在虚拟文件系统上,并且文件的存在并不意味着将任何内容写入物理介质。该实现特定于Linux,不需要POSIX行为。

mq_overview手册页描述了实现。

+0

啊,我明白了,它的实现类似于'虚拟内存文件系统'。 –

+1

@EricWang:我认为队列本身在内存中基本上是一个*内存映射文件*,但文件所在的文件系统本身完全在内存中 - 这可能反过来我会换成系统交换文件。我在这里猜测,但结果是没有任何信息写入磁盘,队列中的任何“文件”都是临时的。当然,其他POSIX实现可能并非如此,这只是Linux的实现。 – Clifford

+0

是的,我想我得到足够的信息来理解这个概念,实际的实现并不重要,我猜。 –

2

否重新启动后不存在,因为它驻留在virtual filesystem上。

+0

好的,我看到链接提到它有'内核持久性'。意思是如果不通过'mq_unlink()'去除,那么它将存在于内核中,直到系统关闭。 –

+0

但我不认为'虚拟文件系统'是造成这种情况的原因,因为所有(至少大部分)普通文件都存在于VFS上,我想。 –

+0

@EricWang:* A * VFS,而不是* VFS。虚拟化文件系统并不意味着相同的行为。常规文件系统将文件提交到物理介质,其他文件系统映射到设备,mq类似于RAM磁盘。 – Clifford

相关问题