【问题标题】:POSIX message queue - Does it still exists after reboot?POSIX 消息队列 - 重新启动后它是否仍然存在?
【发布时间】:2016-03-28 07:04:10
【问题描述】:

在linux上,写了一个简单的程序来创建一个POSIX消息队列,并发送一个msg给它,进程终止后,msg似乎还在。

问题是:

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

【问题讨论】:

    标签: c linux posix ipc message-queue


    【解决方案1】:

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

    【讨论】:

    • 好的,我看到提到的链接有Kernel Persistence。表示如果没有被mq_unlink() 删除,那么它将一直存在于内核中,直到系统关闭。
    • 但我认为virtual file system 不是原因,因为我猜所有(至少大多数)常规文件都存在于 VFS 上。
    • @EricWang:A VFS,而不是 VFS。虚拟化文件系统并不意味着相同的行为。常规文件系统将文件提交到物理介质,其他映射到设备,mq 类似于 RAM 磁盘。
    【解决方案2】:

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

    mq_overview 手册页描述了实现。

    【讨论】:

    • 啊,我明白了,它的实现类似于virtual memory file system
    • @EricWang :我相信队列本身作为内存映射文件在内存中,但文件所在的文件系统本身完全在内存中 -我想这可能会被交换到系统交换文件。我在这里猜测,但结果是没有任何内容写入磁盘,队列留下的任何“文件”都是临时的。此外,当然对于其他 POSIX 实现可能不是这样,这只是 Linux 实现。
    • 是的,我想我得到了足够的信息来理解这个概念,我猜实际的实现并不重要。
    猜你喜欢
    • 1970-01-01
    • 2019-03-17
    • 2012-05-07
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 2011-04-23
    • 1970-01-01
    相关资源
    最近更新 更多