2015-12-22 119 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