【问题标题】:Inter process communication on the same machine,signal or socket,how to decide?同一台机器上的进程间通信,信号还是套接字,如何决定?
【发布时间】:2011-06-14 06:22:29
【问题描述】:

在我看来signalsocket 都可以用于这项工作,

你如何决定实际使用哪一个?

【问题讨论】:

  • 您能否详细说明两个进程之间将传递的信息?进程间通信方式有很多种。
  • 将信号用于 IPC 就像为邮件选择 pidgeons。还有更方便的选择。
  • 尽可能避免信号;他们非常原始,能做的事情也很有限。

标签: c sockets ipc signals


【解决方案1】:

为 IPC 使用信号有点不方便和原始。您真的应该在 Unix 套接字(不是 TCP 套接字!)和管道之间进行选择。

管道通常更容易编程,因为它们保证PIPE_BUF 大小下的单个write 是原子的。然而,它们确实有其局限性。例如,当写入器比读取器快时,写入器会在管道缓冲区满时开始阻塞。默认情况下,这个缓冲区的大小约为 64k,并且在不重新编译内核的情况下无法更改,至少在 Linux 中是这样。管道也是单向的,这意味着您必须在每个进程中保留一对管道,一个用于读取,一个用于写入。

Unix 套接字具有可配置的发送缓冲区大小和更高级的编程接口。

【讨论】:

  • 管道不对这样的读/写做任何保证,很容易构造一个简单的程序来证明一个read可以组合多个write调用。 (请参阅:pastebin.com/LxbreJke)此外,通常不应该对缓冲区大小做出假设(64k 缓冲区是最近发生的变化:我经常使用较旧的 Linux boxen,因为人们拒绝更新。)。管道和套接字之间的主要区别是 FIFO 管道是单向的,Unix 套接字是双向的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
相关资源
最近更新 更多