您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

何时使用管道与何时使用共享内存

何时使用管道与何时使用共享内存

本质上,管道(无论是命名管道还是匿名管道)都像消息传递一样使用。有人将一条信息发送给收件人,收件人可以接收它。共享内存更像是发布数据- 有人将数据放入共享内存中,并且读取器(可能有很多)必须使用同步,例如通过信号量来了解存在新数据的事实,并且必须知道如何读取内存区域以查找信息。

使用管道,同步很简单,并且内置在管道机制中- 当发生有趣的事情时,您的读写将冻结和取消冻结应用程序。使用共享内存,可以更轻松地进行异步工作,并偶尔仅检查一次新数据- 但以更复杂的代码为代价。另外,您可以获得多对多的交流,但又需要更多的工作。同样,由于上述原因,基于管道的通信的调试比调试共享内存更容易。

微小的区别是fifos在文件系统中直接可见,而共享内存区域需要特殊的工具ipcs来进行管理,以防您例如创建共享内存段,但您的应用程序死了并且自身无法清除(信号灯和许多其他同步机制,您可能需要与共享内存一起使用)。

共享内存还使您能够更好地控制缓冲和资源使用- 在操作系统允许的范围内,由您决定分配多少内存以及如何使用它。使用管道,操作系统可以自动控制事物,因此您再次失去了一些灵活性,但省去了很多工作。

最重要的要点摘要:用于一对一通信的管道,更少的编码和让OS处理的事情,用于多对多的共享内存,对事物的更多手动控制,但以更多的工作和更困难的调试为代价。

其他 2022/1/1 18:21:15 有242人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶