比较 Unix/Linux IPC

2024-10-29 08:35:00
admin
原创
48
摘要:问题描述:Unix/Linux 提供了很多 IPC:管道、套接字、共享内存、dbus、消息队列……每种最适合的应用程序是什么,以及它们的性能如何?解决方案 1:Unix进程间通信以下是七大因素:管道仅在父/子相关进程之间有用。调用pipe(2)和fork(2)。单向。FIFO,即命名管道与普通管道不同,两个不...

问题描述:

Unix/Linux 提供了很多 IPC:管道、套接字、共享内存、dbus、消息队列……

每种最适合的应用程序是什么,以及它们的性能如何?


解决方案 1:

Unix进程间通信

以下是七大因素:

  1. 管道

仅在父/子相关进程之间有用。调用pipe(2)fork(2)。单向。

  1. FIFO,即命名管道

与普通管道不同,两个不相关的进程可以使用 FIFO。调用mkfifo(3)。单向。

  1. 套接字和Unix 域套接字

双向。用于网络通信,但也可以在本地使用。可用于不同的协议。TCP 没有消息边界。调用socket(2)

  1. 消息队列

OS 维护离散消息。请参阅sys/msg.h。

  1. 信号

信号将一个整数发送到另一个进程。与多线程配合不佳。调用kill(2)

  1. 信号

多进程或线程的同步机制,类似于排队等待上厕所的人。请参阅sys/sem.h。

  1. 共享内存

进行自己的并发控制。调用shmget(2)

消息边界问题

选择一种方法而不是另一种方法时,一个决定性因素是消息边界问题。您可能希望“消息”彼此分离,但对于 TCP 或 Pipe 等字节流来说并非如此。

考虑一对回显客户端和服务器。客户端发送字符串,服务器接收并立即返回。假设客户端发送“Hello”、“Hello”和“How about an answer?”。

使用字节流协议,服务器可以接收“Hell”、“oHelloHow”和“关于答案?”;或者更现实地说“HelloHelloHow 关于答案?”。服务器不知道消息边界在哪里。

一个古老的技巧是将消息长度限制为CHAR_MAX或,并同意在或UINT_MAX中首先发送消息长度。因此,如果您在接收方,则必须先读取消息长度。这也意味着一次只能有一个线程执行消息读取。char`uint`

使用像 UDP 或消息队列这样的离散协议,您不必担心这个问题,但以编程方式处理字节流更容易,因为它们的行为类似于文件和标准输入/输出。

解决方案 2:

共享内存可能是最高效的,因为您可以在其上构建自己的通信方案,但它需要很多关注和同步。也有解决方案可用于将共享内存分发到其他机器。

套接字是目前最便携的,但需要比管道更多的开销。能够在本地或通过网络透明地使用套接字是一项很大的优势。

消息队列和信号非常适合硬实时应用程序,但它们不太灵活。

这些方法自然是为了进程之间的通信而创建的,而在进程内使用多个线程可能会使事情复杂化——尤其是信号。

解决方案 3:

这是一个带有简单基准的网页:https://sites.google.com/site/rikkus/sysv-ipc-vs-unix-pipes-vs-unix-sockets

据我所知,每种方法都有其优点:

  • 管道 I/O 速度最快,但需要父/子关系才能工作。

  • Sysv IPC 具有定义的消息边界,并且可以本地连接不同的进程。

  • UNIX 套接字可以在本地连接不同的进程,并且具有更高的带宽,但没有固有的消息边界。

  • TCP/IP 套接字可以连接任何进程,甚至通过网络,但开销较高且没有固有的消息边界。

解决方案 4:

值得注意的是,许多库都在一种类型的东西之上实现了另一种类型的东西。

共享内存不需要使用可怕的 sysv 共享内存函数 - 使用 mmap() 更为优雅(如果您希望命名文件,则 mmap 到 tmpfs /dev/shm 上;如果您希望分叉而非执行的进程匿名继承它,则 mmap /dev/zero)。话虽如此,它仍然需要您的进程进行同步以避免出现问题 - 通常通过使用其他 IPC 机制来同步对共享内存区域的访问。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用