gpt4 book ai didi

linux - 比较 Unix/Linux IPC

转载 作者:IT老高 更新时间:2023-10-28 12:26:02 27 4
gpt4 key购买 nike

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

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

最佳答案

Unix IPC

这是七大:

  1. Pipe

    仅在与父/子相关的进程中有用。调用 pipe(2)fork(2) .单向。

  2. FIFO , 或命名管道

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

  3. SocketUnix Domain Socket

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

  4. Message Queue

    操作系统维护离散消息。见 sys/msg.h .

  5. Signal

    信号向另一个进程发送一个整数。不能很好地与多线程啮合。调用 kill(2) .

  6. Semaphore

    一种多进程或多线程的同步机制,类似于排队等候洗手间的人。见 sys/sem.h .

  7. Shared memory

    做你自己的并发控制。调用 shmget(2) .

消息边界问题

选择一种方法而不是另一种方法时的一个决定因素是消息边界问题。您可能希望“消息”彼此分离,但它不适用于 TCP 或 Pipe 这样的字节流。

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

使用字节流协议(protocol),服务器可以接收“Hell”、“oHelloHow”和“about an answer?”;或者更现实地说“你好你好,答案怎么样?”。服务器不知道消息边界在哪里。

一个古老的技巧是将消息长度限制为 CHAR_MAXUINT_MAX 并同意在 charuint。因此,如果您在接收方,则必须先阅读消息长度。这也意味着一次只能有一个线程读取消息。

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

关于linux - 比较 Unix/Linux IPC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/404604/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com