在同一台机器,信号或插座上进行进程间通信,如何决定?

cpu*_*uer 0 c sockets signals ipc

在我看来,这两个signalsocket可用于这项工作,

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

Bla*_*iev 6

使用IPC的信号有点不方便和原始.你应该真正选择Unix套接字(不是TCP套接字!)和管道.

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

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

  • 管道不会对这样的读/写做任何保证,并且很容易构造一个简单的程序来显示一个`read`可以组合多个`write`调用.(参见:http://pastebin.com/LxbreJke)另外,人们通常不应该对缓冲区大小做出假设(64k缓冲区是一个相当新的变化:我经常使用较旧的Linux boxen,因为人们拒绝更新.) .管道和套接字之间的主要区别*是FIFO管道是单向的,Unix套接字是双向的. (3认同)