共享内存和IPC

use*_*324 6 c operating-system ipc shared-memory

我正在阅读有关共享内存的教程,并发现以下声明:"如果进程希望通知另一个进程已将新数据插入共享内存,则必须使用信号,消息队列,管道,套接字或其他IPC的类型." 那么使用共享内存和其他类型的IPC仅用于通知而不是使用不需要任何其他IPC类型的IPC(例如消息队列和套接字)的主要优点是什么?

And*_*ack 8

这里的区别是用于信令与共享状态的 IPC机制.

信令(信号,消息队列,管道等)适用于往往短,及时和有针对性的信息.这些机制上的事件往往会唤醒或中断另一个程序.比喻的是,"一个人将短信节目发送给另一个人?"

  • 嘿,我在哈希表中添加了一个新条目!
  • 嘿,我完成了你要我做的工作!
  • 嘿,这是我猫的照片.他不可爱吗?
  • 嘿,今晚你想出去吗?这个新地方叫做硬盘.

与上述相比,共享存储器对于共享相对较大,稳定的对象更有效,这些对象在小部件中变化或被重复读取.程序可能会不时或在收到其他信号后咨询共享内存.考虑一下,一系列程序会在家中厨房的(大)白板上写什么?

  • 我们最喜欢的食谱.
  • 我们知道的事情.
  • 我们的朋友的电话号码和其他联系信息.
  • 由监狱时间组织的我们家族辉煌历史的最新手稿.

通过这些示例,您可能会说共享内存更接近文件而不是最严格意义上的IPC机制,共享内存的明显例外是

  1. 随机访问,而文件是顺序的.
  2. 易失性,而文件往往在程序崩溃中幸存.